资料:
想用set集合去重,但是发现set和原数组的长度不一样,导致下标不一样。最后还是用了hash。
1. set遍历:
// 迭代器遍历 set
for (auto iter = s.begin(); iter != s.end(); ++iter)
{
cout
C++中set集合的遍历用法介绍_笔记大全_设计学院 (python100.com)
2. 用set去重的方法:三种
第一种最简单:
vector vec = {...};
sets(vec.begin(), vec.end());
vec.assign(s.begin(), s.end());
C++ 给vector去重的三种方法-CSDN博客
3. vector的初始化
// 1.逐个push_back
// 2.指定大小并初始化所有值
vector vect(n, 10); // Create a vector of size n with all values as 10
// 3.像数组一样初始化
vector vect{ 10, 20, 30 };
// 4.使用数组初始化
int arr[] = { 10, 20, 30 };
int n = sizeof(arr) / sizeof(arr[0]);
vector vect(arr, arr + n);
// 5.使用另一个vector初始化
vector vect1{ 10, 20, 30 };
vector vect2(vect1.begin(), vect1.end());
vector的初始化(5种不同方式)_vector初始化-CSDN博客
自己写的:
多加了个hash判断是否重复。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @para服务器托管网m num int整型vector
* @return int整型vector>
*/
vector > ans;
vector flag;
void dfs(vectornum, vectorans_single){
if(ans_single.size() == num.size()){
ans.push_back(ans_single);
return;
}
unordered_map hash;
for(int i = 服务器托管网0; i > permuteUnique(vector& num) {
// write code here
for(int i = 0; i ans_single;
dfs(num, ans_single);
sort(ans.begin(), ans.end());
return ans;
}
};
模板的:
框架与我的一样。
不同之处:我采用hash判断。模板采用和前一个元素进行比较。
个人疑问,得到解决:
- if(i != 0 && num[i-1] == num[i] && flag[i-1] == 0) 里,为什么不是flag[i-1] == 1?
- 因为flag的标记是纵向的。当前的num[i]必须和前一个num[i-1]是相同的,并且前一个num[i-1]是之前层未被选择的,是与num[i]是属于同一层的。
- 为什么直接continue就行,不需要vis[i]=1。
- 重复的只需要横向选择一次。所以,第一次出现,与前一个是不同的;第二次及以后的每次出现,都与前一个相同。所以不需要进行任何操作。(模板的巧妙之处)
- vis[i]是纵向的。我完全搞混了概念。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型vector
* @return int整型vector>
*/
vector > ans;
vector flag;
void dfs(vectornum, vectorans_single){
if(ans_single.size() == num.size()){
ans.push_back(ans_single);
return;
}
for(int i = 0; i > permuteUnique(vector& num) {
// write code here
for(int i = 0; i ans_single;
sort(num.begin(), num.end()); //模板的方法需要之前就排好序
dfs(num, ans_single);
return ans;
}
};
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net