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;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号