题目

代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
       //首先进行排序
       sort(nums.begin(),nums.end());
       vector<vector<int>>ans;//创建存储结果数组
       for(int i = 0;i<nums.size()-2;i++)
       {
        int j = i+1;
        int k = nums.size()-1;
        if(i>0&&nums[i]==nums[i-1])
        //while 里写 continue:i 不变,原地卡死,重复还照样算
        //if 里写 continue:i 自动 ++,直接跳过重复项
        continue;
        while(j<k)
        {
            int sum = nums[i]+nums[j]+nums[k];
            if(sum<0)
            j++;
            else if(sum>0)
            k--;
            else
            {
            ans.push_back({nums[i],nums[j],nums[k]});
            j++;
            while(j<k&&nums[j]==nums[j-1])
            j++;
            k--;
            }
        }
       }
           return ans;
    }
};

思路参考Bilibili灵神的讲解http://【两数之和 三数之和【基础算法精讲 01】】https://www.bilibili.com/video/BV1bP411c7oJ?vd_source=05932f437c6d5e1af1e68ddc49baa55b这里不再过多赘述

更多推荐