做老师一些好的网站,wordpress 媒体图片,多语种网站建设,快三直播十大平台直播间解题思路#xff1a;
首先这题也可以用set来做但是去重麻烦#xff0c;很难快速搞定#xff0c;#xff08;用sort排序一遍先#xff09;所以我采用双指针来解决这道题#xff0c;定义i,left,right#xff0c;分别指向遍历头#xff0c;和头的下一位以及最后一位。然后…解题思路
首先这题也可以用set来做但是去重麻烦很难快速搞定用sort排序一遍先所以我采用双指针来解决这道题定义i,left,right分别指向遍历头和头的下一位以及最后一位。然后通过left和right的移动来判断这段里是否nums[i]nums[left]nums[right]0如果有就记录下来然后再移动开始的节点i,需要注意的是去重操作要对left和right对应的前后元素去重
代码实现如下
class Solution {
public: vectorvectorint threeSum(vectorint nums) { vectorvectorintresult; sort(nums.begin(),nums.end()); for(int i0;inums.size();i) { if(nums[i]0) return result; if(i0nums[i]nums[i-1]) continue; int lefti1; int rightnums.size()-1; while(leftright) { if(nums[i]nums[left]nums[right]0) right--; else if(nums[i]nums[left]nums[right]0) left; else {result.push_back(vectorint{nums[i],nums[left],nums[right]}); while(rightleftnums[left]nums[left1])left; while( rightleftnums[right]nums[right-1])right--; left;right--; } } }return result; }
};