LeetCode 15 三数之和

class Solution {
public:
    vector<vector<int>> res;

    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(), nums.end());

        for (int i = 0; i < nums.size(); i ++) {
            if (nums[i] > 0) return res; //第一位大于0后面相加必定大于0

            if (i > 0 && nums[i] == nums[i - 1]) continue; //去重i

            int left = i + 1, right = nums.size() - 1; 
            while (left < right) {
                if (nums[i] + nums[left] + nums[right] > 0) right --;
                else if (nums[i] + nums[left] + nums[right] < 0) left ++;
                else {
                    res.push_back({nums[i], nums[left], nums[right]});

                    while (left < right && nums[left] == nums[left + 1]) left ++; //去重left
                    while (left < right && nums[right] == nums[right - 1]) right --; //去重right

                    left ++;
                    right --;
                }
            }
        }  

        return res; 
    }
};
posted @ 2022-09-05 18:02  hjy94wo  阅读(27)  评论(0)    收藏  举报