3-sum leetcode经典解答

原创 2016年08月29日 11:15:48
  class Solution {
 public:
     vector<vector<int> > threeSum(vector<int> &num) {
         int n = num.size();
         sort(num.begin(), num.end());
         vector<vector<int> > res;
         for(int i = 0; i < n-2; i++)
         {
             if(i > 0 && num[i] == num[i-1])continue;//重复的元素不用计算
             int target2 = 0 - num[i];
             twoSum(num, i+1, target2, res);
         }
         return res;
     }
     void twoSum(vector<int> &sortedNum, int start, int target, vector<vector<int> >&res)
     {
         int head = start, tail = sortedNum.size() - 1;
         while(head < tail)
         {
             int tmp = sortedNum[head] + sortedNum[tail];
             if(tmp < target)
                 head++;
             else if(tmp > target)
                 tail--;
             else
             { ;
                 res.push_back(vector<int>{sortedNum[start-1], sortedNum[head], sortedNum[tail]});
                 
                 //为了防止出现重复的二元组,使结果等于target
                 int k = head+1;
                 while(k < tail && sortedNum[k] == sortedNum[head])k++;
                 head = k;
                 
                 k = tail-1;
                 while(k > head && sortedNum[k] == sortedNum[tail])k--;
                 tail = k;
             }
         }
     }
 };

【LeetCode-面试算法经典-Java实现】【016-3 Sum Closest(最接近的三个数的和)】

【016-3 Sum Closest(最接近的三个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, ...

【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】

【013-3 Sum(三个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, are there el...

【LeetCode-面试算法经典-Java实现】【064-Minimum Path Sum(最小路径和)】

【064-Minimum Path Sum(最小路径和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a m x n grid filled with no...

LeetCode.599 Minimum Index Sum of Two Lists (经典:哈希表对字符串去重和List与数组间的转换)

题目: Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of...

【LeetCode-面试算法经典-Java实现】【001-Two Sum(求两个数的和)】

给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。要求:这个函数twoSum必须要返回能够相加等于目标数字的两个数的索引,且index1必须要小于index2。请注意一点,你返回的结果(包...

【LeetCode-面试算法经典-Java实现】【216-Combination Sum III (组合数的和)】

【216-Combination Sum III (组合数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-...

【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...

【LeetCode-面试算法经典-Java实现】【018-4Sum(四个数的和)】

【018-4Sum(四个数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an array S of n integers, are there ele...

【LeetCode-面试算法经典-Java实现】【112-Path Sum(路径和)】

【112-Path Sum(路径和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, determine if...

LeetCode之4Sum(经典)

题目: Given an array S of n integers, are there elements a,b,c, and d in S such that a+b+c+d = target...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3-sum leetcode经典解答
举报原因:
原因补充:

(最多只允许输入30个字)