码迷,mamicode.com
首页 > 其他好文 > 详细

15. 3Sum

时间:2017-04-04 15:11:44      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:tin   tor   set   logs   --   begin   amp   ret   return   

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>>ans;
        int n=nums.size();
        for(int i=0;i<n-2;i++){
            if(i&&nums[i]==nums[i-1])continue;//跳过重复值
            int low=i+1,high=n-1,mid,sum=-nums[i];//Two-Sum problem
            while(low<high){
                if(nums[low]+nums[high]==sum){
                    ans.push_back({nums[i],nums[low],nums[high]});//find one
                    while(low<high&&nums[low]==nums[low+1])low++;
                    while(low<high&&nums[high]==nums[high-1])high--;
                    low++,high--;
                }
                else if(nums[low]+nums[high]<sum){
                    while(low<high&&nums[low]==nums[low+1])low++;
                    low++;
                }
                else {
                      while(low<high&&nums[high]==nums[high-1])high--;
                      high--;
                }
            }
        }
        return ans;
    }
};

 

15. 3Sum

标签:tin   tor   set   logs   --   begin   amp   ret   return   

原文地址:http://www.cnblogs.com/tsunami-lj/p/6664928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!