题目链接:三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

方法:二分查找

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>> ans;
        for (int i = 0;i < nums.size()-2;i++) {
            int x = nums[i];
            int n = nums.size();
            if (i && x == nums[i-1]) continue;
            if (x + nums[i+1] + nums[i+2] > 0) break;
            if (x + nums[n-1] + nums[n-2] < 0) continue;
            int j = i+1,k = n-1;
            while (j < k) {
                int s = x + nums[j] + nums[k];
                if (s > 0) {
                    k--;
                }else if (s < 0) {
                    j++;
                }else {
                    ans.push_back({x,nums[j],nums[k]});
                    for (j++;j < k && nums[j] == nums[j-1];j++);
                    for (k--;k > j && nums[k] == nums[k+1];k--);
                }
            }
        }
        return ans;
    }
};

标签: hot100, Medium, 二分查找

添加新评论