问题
- 如何去除重得到的重复组?
- python和c++中的不同方式;
解决
while(front < rear){
if(nums[i] + nums[front] + nums[rear]==0){
vector<int> factor;
factor.push_back(nums[i]);
factor.push_back(nums[front]);
factor.push_back(nums[rear]);
res.push_back(factor);
cout<<nums[i]<<nums[front]<<nums[rear]<<endl;
front++;
rear--;
while(front < rear && nums[front] == nums[front-1])
front++;
while(front < rear && nums[rear] == nums[rear+1])
rear--;
}
else if(nums[i] + nums[front] +nums[rear] > 0){
rear--;
}
else{
front++;
}
}
- 通过将两个指针去除重复数值,实现指针中的去重复值
while(front < rear && nums[front] == nums[front-1])
front++;
while(front < rear && nums[rear] == nums[rear+1])
rear--;
important!!
实现查找可以向前查找,或者向后查找,分别是:
A: nums[front] == nums[front-1]
或
B: nums[front] == nums[front+1]
这种方法的不同点在于,在完成后==0条件后是否进行front和rear指针的跳转;
讨论:
1. A方式实现向后查找,就是先进行指针跳转;
2. B方式实现向前跳转,步骤是先排除重复数值,然后进行front和rear指针跳转;
if(i > 0 && nums[i]==nums[i-1]) continue;
这一步就是实现 i 移动时,排除重复值,此处就是向前查找
- python和c++中的不同方式;
最终结果是格式[[1,2,-3],[1,0,-1]......]
c++:
题目是 vector<vector<int>> 进行;
c++排序:sort(nums.begin() , nums.end())
python:List[List[int]]
python的排序:nums.sort()
图一说明
此图引用大佬的图,侵权立删,非常感谢!