首页 > 其他 > 详细

3Sum

时间:2014-04-04 17:01:39      阅读:526      评论:0      收藏:0      [点我收藏+]

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? 

Find all unique triplets in the array which gives the sum of zero.
Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a <= b <= c)
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)

bubuko.com,布布扣
 1 class Solution {
 2 public:
 3     vector<vector<int> > threeSum(vector<int> &num) {
 4         vector<vector<int> > res;
 5         if(num.size() < 3)
 6             return res;
 7         sort(num.begin(), num.end());
 8         int N = num.size();
 9         for(int i = N-1; i >= 2; i--) {
10             if(i != N-1 && num[i] == num[i+1]) {
11                 continue; } // handle duplicated cases
12             for(int j = 0, k = i-1; j < k; ) {
13                 if(j != 0 && num[j] == num[j-1]) { j++; continue; }
14                 if(k != i-1 && num[k] == num[k+1]) { k--; continue; }
15                 int sum = num[i] + num[j] + num[k];
16                 if(sum == 0) {
17                     vector<int> tmp(3);
18                     tmp[0] = num[j];
19                     tmp[1] = num[k];
20                     tmp[2] = num[i];
21                     res.push_back(tmp);
22                     j++; 
23                     k--;
24                 }
25                 else if(sum < 0) { j++; }
26                 else { k--; }
27             }
28         }
29         return res;
30     }
31 };
bubuko.com,布布扣

 

3Sum,布布扣,bubuko.com

3Sum

原文:http://www.cnblogs.com/zhengjiankang/p/3644610.html

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