leetcode15.三数之和(c++)

    xiaoxiao2023-10-07  160

    此处将i固定住,然后移动j和k,如果三个数相加大于target,k左移,如果小于target,那么j右移,否则就把三个数存起来。(注意要避开相同的数字,因为此处是先排序再进项下面的操作,那就要对连续相同的数字进行一定的跳过操作。)

    class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; int target=0; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();i++){ if(i>0&&nums[i]==nums[i-1]) continue; for(int j=i+1,k=nums.size()-1;j<k;){ int sum=nums[i]+nums[j]+nums[k]; if(sum<target){ j++; }else if(sum>target){ k--; }else{ vector<int> a(3,nums[i]); a[1]=nums[j++]; a[2]=nums[k--];//下一个 res.push_back(a); while(j<k&&nums[j]==nums[j-1]) j++; while(k>j&&nums[k]==nums[k+1]) k--; } } } return res; } };
    最新回复(0)