Leetcode—18.四数之和【中等】

2023每日刷题(四十一)

Leetcode—18.四数之和

Leetcode—18.四数之和【中等】_第1张图片

实现代码

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ans;
        sort(nums.begin(), nums.end());
        int n = nums.size();
        int i, j, k, h;
        long long s, x, y;
        for(i = 0; i < n - 3; i++) {
            x = nums[i];
            // 除重
            if(i > 0 && x == nums[i - 1]) {
                continue;
            }
            if(x + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) {
                break;
            }
            if(x + nums[n - 1] + nums[n - 2] + nums[n - 3] < target) {
                continue;
            }
            
            // 除重
            for(h = i + 1; h < n - 2; h++) {
                y = nums[h];
                if(h > i + 1 && y == nums[h - 1]) {
                    continue;
                }
                if(x + y + nums[h + 1] + nums[h + 2] > target) {
                    break;
                }
                if(x + y + nums[n - 1] + nums[n - 2] < target) {
                    continue;
                }
                j = h + 1;
                k = n - 1;
                while(j < k) {
                    s = x + y + nums[j] + nums[k];
                    if(s > target) {
                        k--;
                    } else if(s < target) {
                        j++;
                    } else {
                        vector<int> res;
                        res.push_back((int)x);
                        res.push_back((int)y);
                        res.push_back(nums[j]);
                        res.push_back(nums[k]);
                        ans.push_back(res);
                        j++;
                        while(j < k && nums[j] == nums[j - 1]) {
                            j++;
                        }
                        k--;
                        while(j < k && nums[k] == nums[k + 1]) {
                            k--;
                        }
                    }
                }
            }
        }
        return ans;
    }
};

运行结果

Leetcode—18.四数之和【中等】_第2张图片
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

你可能感兴趣的:(LeetCode刷题,leetcode,算法,职场和发展,c++,经验分享)