三个数的和,leetcode问题

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

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

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

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解法一:C++,暴力求解法,时间复杂度是O(n^3)

class Solution {
public:
    vector> threeSum(vector& nums) {
        int len = nums.size();
        vector list;
        vector>list1;
        vector temp;
        int l;
        for(int i=0;i

这个解法并未AC,311个示例有两个未通过

解法二:通过对原来数组进行排序寻找规律:

class Solution {
public:
    vector> threeSum(vector& nums) {
        sort(nums.begin(),nums.end());//先对数组进行一个升序排序;
        vector>rev;//初始化一个二维数组;
        vectortemp;//初始化一个一维数组;
        int len=nums.size();
        if(len==0){//当原始数组是空时直接退出;
            return {};
        }
        for(int i=0;i0 || nums[len-1]<0){//当经过排序的数组的最大值小于零或者最小值大于0,则不可能出现三个数的和是零;
                break;
            }
                
            if(i>0&&nums[i]==nums[i-1]){//当最小的数出现重复时,直接跳过;
                    continue;
                }
            int first=i+1;
            int last=len-1;
             while(first0){//当出现结果大于零时,最后的指针左移;
                       last = last-1;
                       while(first

你可能感兴趣的:(三个数的和,leetcode问题)