
1581674751476.png
問題
- 如何去除重得到的重復(fù)組?
- 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++;
}
}
- 通過將兩個(gè)指針去除重復(fù)數(shù)值,實(shí)現(xiàn)指針中的去重復(fù)值
while(front < rear && nums[front] == nums[front-1])
front++;
while(front < rear && nums[rear] == nums[rear+1])
rear--;
important??!
實(shí)現(xiàn)查找可以向前查找,或者向后查找,分別是:
A: nums[front] == nums[front-1]
或
B: nums[front] == nums[front+1]
這種方法的不同點(diǎn)在于,在完成后==0條件后是否進(jìn)行front和rear指針的跳轉(zhuǎn);
? 討論:
1. A方式實(shí)現(xiàn)向后查找,就是先進(jìn)行指針跳轉(zhuǎn);
2. B方式實(shí)現(xiàn)向前跳轉(zhuǎn),步驟是先排除重復(fù)數(shù)值,然后進(jìn)行front和rear指針跳轉(zhuǎn);
if(i > 0 && nums[i]==nums[i-1]) continue;
這一步就是實(shí)現(xiàn) i 移動時(shí),排除重復(fù)值,此處就是向前查找
- python和c++中的不同方式;
最終結(jié)果是格式[[1,2,-3],[1,0,-1]......]
c++:
題目是 vector<vector<int>> 進(jìn)行;
c++排序:sort(nums.begin() , nums.end())
python:List[List[int]]
python的排序:nums.sort()
圖一說明
此圖引用大佬的圖,侵權(quán)立刪,非常感謝!