首页 > 其他 > 详细

leetcode 15 三数之和

时间:2021-08-16 14:52:15      阅读:25      评论:0      收藏:0      [点我收藏+]

暴力算法必须贴,虽然超时了,但我真的觉得是个好办法

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {
        vector<vector<int>> result;
        int n = nums.size();
        if(n<=2)
        return result;
        vector<int> temp;
        for(int i = 0 ; i < n-2 ; i++)
        {
            for(int j = i+1 ; j < n-1 ; j++)
            {
                for(int k = j+1 ; k<n ; k++)
                {
                    if(nums[i] + nums[j] + nums[k] == 0)
                    {
                        temp = {nums[i],nums[j],nums[k]};
                        sort(temp.begin(),temp.end());
                        result.push_back(temp);
                    }
                }
            }
        }
        sort(result.begin(),result.end());
        result.erase(unique(result.begin(),result.end()),result.end());
        return result;
    }
};

  排序是个好思路,先把所有数据从小到达排序,进行第二个循环的时候b和c可以同步进行,一个从前往后,一个从后往前

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {
        vector<vector<int>> result;
        int n = nums.size();
        if(n<=2)
        return result;
        sort(nums.begin(),nums.end());
        vector<int> temp;
        int i = 0;
        for(int i = 0 ; i < n-2 ; i++)         //第一位不一样
        {
            if(i > 0 && nums[i] == nums[i-1])
            continue;
            int k = n-1;
            for(int j = i+1 ; j < n-1 ; j++)   //对j循环
            {
                if(j > i+1 && nums[j] == nums[j-1])           //保证第二个数不重复
                continue;
                while(j < k && nums[i]+nums[j]+nums[k]>0)
                {
                    k--;
                }
                if(j == k)
                break;
                if(nums[i]+nums[j]+nums[k] == 0)
                result.push_back({nums[i],nums[j],nums[k]});
            }            
        }
        return result;
    }
};

  

leetcode 15 三数之和

原文:https://www.cnblogs.com/zhaohhhh/p/15147283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!