LeetCode—— 四数之和

题目地址:https://leetcode-cn.com/problems/4sum/

解题思路:和之前三数求和类似,只不过多了层循环。

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        int a, b, c, d;
        int len = nums.size();
        if (len < 4)
            return ans;
        for (a = 0; a < len; a++) {
            if (a > 0 && nums[a] == nums[a - 1])
                continue;
            for (b = a + 1; b < len; b++) {
                if (b > a + 1 && nums[b] == nums[b - 1])
                    continue;
                c = b + 1;
                d = len - 1;
                while (c < d) {
                    if (c > b + 1 && nums[c] == nums[c - 1]) {
                        c++;
                        continue;
                    }
                    while (c < d&&nums[a] + nums[b] + nums[c] + nums[d] > target)
                        d--;
                    while (c < d&&nums[a] + nums[b] + nums[c] + nums[d] < target)
                        c++;
                    if (c < d&& nums[a] + nums[b] + nums[c] + nums[d] == target) {
                        ans.push_back({ nums[a],nums[b], nums[c], nums[d] });
                        c++;
                    }
                }
            }
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/cc-xiao5/p/13441515.html