c_cpp 15. 3Sum

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 15. 3Sum相关的知识,希望对你有一定的参考价值。

class Solution {
private:
    vector<vector<int>> res;
    void findTwoSum(const vector<int> & nums, const int currentI) {
        int target = nums[currentI];
        int head = currentI + 1, tail = nums.size() - 1;
        while (head < tail) {
            int expect = 0 - target - nums[head] - nums[tail];
            if (expect > 0) {
                head++;
            } else if (expect < 0) {
                tail--;
            } else {
                res.push_back({target, nums[head], nums[tail]});
                while (head+1 < tail && nums[head] == nums[head+1]) head++;
                head++;
                tail--;
            }    
        }
    }
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        if (nums.size() < 3) return {};
        sort(nums.begin(), nums.end());
        for (int i=0; i<nums.size() - 2; i++) {
            findTwoSum(nums, i);
            while (i+1 < nums.size() && nums[i] == nums[i+1]) i++;
        }
        return res;
    }
};

以上是关于c_cpp 15. 3Sum的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 16. 3Sum Closest- Med - 2018.11.2

c_cpp [阵] 3sum最近。给定n个整数的数组S,在S中找到三个整数,使得总和最接近给定数字target。 Retur

15 & 16. 3Sum & 3Sum Cloest

15. 3Sum

15. 3Sum

15. 3Sum