美文网首页
【LeetCode】Three Sum

【LeetCode】Three Sum

作者: MyyyZzz | 来源:发表于2019-03-04 18:15 被阅读0次

    给定一个包含 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< vector<int> > threeSum(vector<int>& nums) {
            vector< vector<int> > Result;
            sort(nums.begin(), nums.end());
            for(int i=0; i<nums.size(); ++i)
            {
                int front = i+1;
                int back = nums.size() - 1;
                int target = -nums[i];
    
                while(front < back)
                {
                    int sum = nums[front] + nums[back];
                    
                    if(sum < target)
                        ++front;
                    else if(sum > target)
                        --back;
                    else
                    {
                        vector<int> Num(3, 0);
                        Num[0] = nums[i];
                        Num[1] = nums[front];
                        Num[2] = nums[back];
                        Result.push_back(Num);
    
                        while(front < back && nums[front] == Num[1])
                            ++front;
                        
                        while(front < back && nums[back] == Num[2])
                            --back;
                    } 
                }
    
                while(i+1 < nums.size() && nums[i+1] == nums[i])
                    ++i;
            }
            return Result;
        }
    };
    

    相关文章

      网友评论

          本文标题:【LeetCode】Three Sum

          本文链接:https://www.haomeiwen.com/subject/brtwuqtx.html