程式語言 - LeetCode - C++ - 18. 4Sum



參考資訊:
https://algo.monster/liteproblems/18

題目:


解答:

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        int size = nums.size();
        vector<vector<int>> ret;

        sort(nums.begin(), nums.end());

        for (int i = 0; i < size - 3; ++i) {
            if ((i > 0) && (nums[i] == nums[i - 1])) {
                continue;
            }

            for (int j = i + 1; j < size - 2; ++j) {
                if ((j > i + 1) && (nums[j] == nums[j - 1])) {
                    continue;
                }

                int l = j + 1;
                int r = size - 1;

                while (l < r) {
                    long long v = static_cast<long long>(nums[i]) + nums[j] + nums[l] + nums[r];

                    if (v == target) {
                        ret.push_back({ nums[i], nums[j], nums[l], nums[r] });

                        l += 1;
                        r -= 1;

                        while ((l < r) && (nums[l] == nums[l - 1])) {
                            l += 1;
                        }
                        while ((l < r) && (nums[r] == nums[r + 1])) {
                            r -= 1;
                        }
                    }
                    else if (v < target) {
                        l += 1;
                    }
                    else {
                        r -= 1;
                    }
                }
            }
        }

        return ret;
    }
};