18. 四数之和(LeetCode中等)(双指针)

18. 四数之和
O(n^3)

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        for(int i = 0; i < nums.size(); ++i){
            if(i && nums[i] == nums[i-1]) continue;
            for(int j = i + 1; j < nums.size(); ++j){
                if(j > i + 1 && nums[j] == nums[j-1]) continue;
                for(int k = j + 1, l = nums.size() - 1; k < l; ++k){
                    if(k > j + 1 && nums[k] == nums[k-1]) continue;
                    while(l - 1 > k && 0ll + nums[i] + nums[j] + nums[k] + nums[l] > target) --l;
                    if(0ll + nums[i] + nums[j] + nums[k] + nums[l] == target) 
                        ans.push_back({nums[i], nums[j], nums[k], nums[l]});
                }
            }
        }

        return ans;
    }
};
posted @ 2025-03-15 14:31  awei040519  阅读(13)  评论(0)    收藏  举报