程式語言 - LeetCode - C++ - 15. 3Sum



參考資訊:
https://algo.monster/liteproblems/15
https://www.cnblogs.com/grandyang/p/4481576.html

題目:


解答:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ret;

        sort(nums.begin(), nums.end());
        for (int i = 0; i < (int)nums.size() - 2; ++i) {
            if (nums[i] > 0) {
                break;
            }

            if ((i > 0) && (nums[i] == nums[i - 1])) {
                continue;
            }

            int target = 0 - nums[i];
            int l = i + 1;
            int r = (int)nums.size() - 1;
            while (l < r) {
                if (nums[l] + nums[r] == target) {
                    ret.push_back({ nums[i], nums[l], nums[r] });

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

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

        return ret;
    }
};