LeetCode-15-3sum

LeetCode-15-3sum

一、题目描述

  给定一个int类型的数组,找出其中的3个元素a,b,c,使a+b+c=0。找出所有的这样的三元组

  exapmle:

  给定数组:S = [-1, 0, 1, 2, -1, -4]

  返回值:

  [
    [-1, 0, 1],
    [-1, -1, 2]
  ]

二、题目解答

  先进行排序,然后确定第一个数的位置,剩下两个位置采用两边逼近的方式。

vector<vector<int>> threeSum(vector<int>& nums) {
	vector<vector<int>> result;
	sort(nums.begin(), nums.end());
	int i = 0;
	int last = nums.size() - 1;
	while (i < last) {
		int a = nums[i];
		int j = i + 1;
		int k = last;
		while (j < k) {
			int b = nums[j];
			int c = nums[k];
			int sum = a + b + c;
			if (sum == 0)
				result.push_back({a,b,c});
			if (sum <= 0)
				while (nums[j] == b && j < k)
					j++;
			if (sum >= 0)
				while (nums[k] == c && j < k)
					k--;
		}
		while (nums[i] == a && i < last)
			i++;
	}
	return result;
}

  

posted @ 2017-12-20 20:13  番茄汁汁  阅读(86)  评论(0编辑  收藏  举报