leetcode 015 —— 3Sum

原创 2015年07月08日 20:13:49

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Fi
nd 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)

思路:排序,锁定一个节点,在后续节点中,双端扫描。

class Solution {
public:
	vector<vector<int>> threeSum(vector<int>& nums) {
		vector<vector<int>> res;
		int n = nums.size();
		if (n < 3)	return res;
		sort(nums.begin(), nums.end());
		for (int i = 0; i < n - 2; i++){
			if (i>0 && nums[i] == nums[i - 1])//序列nums是递增的,所以nums[i]能产生的组合总是<= nums[i-1]
				continue;
			int target = 0 - nums[i];
			int start = i+1;
			int end = n-1;
			while (start < end){
				int sum = nums[start] + nums[end];
				if (sum == target){
					vector<int> tmp;
					tmp.push_back(nums[i]);
					tmp.push_back(nums[start]);
					tmp.push_back(nums[end]);
					//cout << nums[i] << ' ' << nums[start] << ' ' << nums[end] << endl;
					res.push_back(tmp);
					while (start < end&&nums[start] == nums[start + 1])
						start++;
					while (start < end&&nums[end] == nums[end - 1])
						end--;
					start++;  //继续往中间搜索
					end--;

				}
				else if (sum < target)
					start++;
				else
					end--;
					
			}
			
		}
		return res;
		

	}
};


【LeetCode】3Sum 解题报告

这道题凭我现有知识实在解答不上来,只好网上搜索解法,才发现 K Sum 是一类问题,但是网上没有比较简洁的代码,我想对于初学者来说,可能还是想先看看这道题怎么解,然后才有兴趣去看其扩展吧。 【题目】 ...
  • ljiabin
  • ljiabin
  • 2014年10月30日 16:00
  • 28021

LeetCode 3Sum 三个数和为零的集合 C++完整程序

掌握了这样的题的要诀就好办: 1 排序 2 前面的两个小数和后面的一个大数相加比较,如果小于0,那么前面的数往前进,增大; 如果大于0,那么后面的数往前进,减小。 3 前面的数和后面的数相遇,本...
  • kenden23
  • kenden23
  • 2013年11月24日 19:11
  • 4290

【Leetcode 15】3Sum 三数和问题 C++

leetcode15 threeSum 三数和问题,C++
  • u010656539
  • u010656539
  • 2016年08月14日 15:30
  • 1716

LeetCode 之K-Sum 问题(个人理解) 双指针大法(总结)

做过leetcode的人都知道, 里面有2sum, 3sum(closest), 4sum等问题, 这些也是面试里面经典的问题, 考察是否能够合理利用排序这个性质, 一步一步得到高效的算法. 经过总结...
  • liutianshx2012
  • liutianshx2012
  • 2015年06月17日 10:29
  • 729

LEETCODE 150题吐血大整理

原文地址:http://bowang.name/leetcode-150/ 断断续续刷了三个月的leetcode,近日终于大功告成。这里把所有题目按难易程度分了下类,并作了简要说明。...
  • zr459927180
  • zr459927180
  • 2016年07月17日 15:49
  • 8872

LeetCode进阶之路(3Sum)

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all u...
  • yulingkai88
  • yulingkai88
  • 2016年07月14日 23:57
  • 181

【Leetcode】3Sum - 【两个指针】

15. 3Sum Total Accepted: 127471Total Submissions: 659843Difficulty: Medium Given an array S...
  • renxingzhadan
  • renxingzhadan
  • 2016年07月08日 16:33
  • 192

【Leetcode】之3sum问题

一.问题描述Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find ...
  • messiran10
  • messiran10
  • 2015年11月02日 15:16
  • 217

LeetCode题解——3Sum

iven an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all u...
  • u010025211
  • u010025211
  • 2015年07月12日 22:11
  • 369

LeetCode 15 3Sum(3个数的和)

翻译给定一个有n个整数的数组S,是否存在三个元素a,b,c使得a+b+c=0? 找出该数组中所有不重复的3个数,它们的和为0。备注: 这三个元素必须是从小到大进行排序。 结果中不能有重复的3个数。例如...
  • NoMasp
  • NoMasp
  • 2015年10月17日 23:19
  • 3471
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode 015 —— 3Sum
举报原因:
原因补充:

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