leetcode题库——三数之和

题目描述:

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

方法:

暴力方法超时限了,所以换了一种跟两数之和差不多的方法:排序+类似二分的方法。

class Solution {
public:
    vector > threeSum(vector& nums) {
        vector > ans;
        vector mid;
        sort(nums.begin(),nums.end());
        if(nums.size()==0||nums.size()==1||nums.size()==2) return ans;
        for(int i=0;i0&&nums[i]==nums[i-1]) continue;
            int flagl=i+1,flagr=nums.size()-1;
            while(flagli+1&&nums[flagl]==nums[flagl-1]) {flagl++;continue;}
                if(flagr0)
                    flagr--;
                if(nums[i]+nums[flagl]+nums[flagr]<0)
                    flagl++;
            }
        }
        return ans;
    }
};

思路:

先对数组进行排序,第一个数遍历,若在遍历过程中遇到重复,则直接跳过,遍历下一个数。然后对于三个数中剩下的两个数,对应二分法中的两个指针,如果三数之和大于0,则右指针左移,如果三数之和小于0,则左指针右移。

你可能感兴趣的:(leetcode题库)