LeetCode

LeetCode-15 三数之和

nkul · 9月27日 · 2020年 · 29次已读

1、去重

2、三数之和类型的题目,都要先排序,然后使用多指针

3、本题三数,需要固定一个指针(即for循环),另两个指针用于查找之和为target – nums[i]

class Solution {
public:
    vector> threeSum(vector& nums) {
        vector> res;
        sort(nums.begin(),nums.end());
        for(int i = 0 ; i < nums.size(); i++){
            //去重
            if(i && nums[i] == nums[i-1]) continue;
            //双指针
            for(int j = i + 1 ,k = nums.size() - 1;j < k ; j++){
                //去重
                if( j > i+1 && nums[j] == nums[j - 1]) continue;
                //找到最近且大于等于target的k,此时i,j,k-1是小于target的
                while(j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k--;
                if(nums[i] + nums[j] + nums[k] == 0)
                    res.push_back({nums[i], nums[j], nums[k]});
            }
        }
        return res;
    }
};


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!