18. 4Sum 注意这题!!!

image.png

思路: 排序+两重循环+两根指针
解题:复杂度O(n^3)
有一个问题要注意!!!
一定要是
int(nums.size() - 3)
当nums = []时, 直接nums.size()-3 值为1 8446744073709551613

class Solution {
public:
    vector> fourSum(vector& nums, int target) {
        set> res;
        sort(nums.begin(),nums.end());
        for(int i = 0 ; i < int(nums.size() - 3); i++){
            for(int j = i+1; j < int(nums.size() - 2); j++){
                if(j > i+1 && nums[j] == nums[j-1]) continue;
                int l = j + 1;
                int r = nums.size() - 1;
                while(l < r){
                    int ans = nums[i] + nums[j] + nums[l] + nums[r];
                    if(ans == target){
                        vector out = {nums[i], nums[j], nums[l], nums[r]};
                        res.insert(out);
                        l++;
                        r--;
                    }
                    else if(ans < target){
                        l++;
                    }
                    else
                        r--;
                    
                }
            }
        }
        return vector>(res.begin(), res.end());
    }
};

你可能感兴趣的:(18. 4Sum 注意这题!!!)