【LeetCode】15. 三数之和

class Solution{
public:
    vector<vector<int>> threeSum(vector<int>& nums)
    {
        sort(nums.begin(),nums.end());
        vector<vector<int>> ans;
        for(int k=0;k<nums.size();++k)
        {
            if(k>0&&nums[k]==nums[k-1])
                continue;   //去重
            int i=k+1,j=nums.size()-1;
            while(i<j)
            {
                if(nums[i]+nums[j]==-nums[k])
                {
                    ans.push_back(vector<int>{nums[k],nums[i],nums[j]});
                    ++i,--j;
                    while(i<j&&nums[i-1]==nums[i])
                        ++i;//去重
                    while(i<j&&nums[j]==nums[j+1])
                        --j;//去重
                }
                else if(nums[i]+nums[j]<-nums[k])
                {
                    ++i;   //双指针,当和小于0时,左边指针向右移动
                }
                else
                {
                    --j;   //当和大于0时,右边指针向左移动
                }
            }
        }
        return ans;
    }
};

 

上一篇:Hive 利用 on tez 引擎 合并小文件


下一篇:PrismWPF网盘