标签:style blog http color os 使用 io ar for
给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的.
解法思路参考: Finding three elements in an array whose sum is closest to an given number.
我们首先将问题P转化为P‘: 能否从数组中找到3个元素, 使得它们的和最接近0?
这个转化非常简单, 只需要将原数组中的每个数都减去目标值的1/3即可.
随后我们解决P‘的方法如下:
代码:
1 class Solution { 2 public: 3 int threeSumClosest(vector<int> &num, int target) { 4 int minSum = num[0] + num[1] + num[2]; 5 6 if (num.size() == 3) return minSum; 7 8 int sum = 0; 9 sort(num.begin(), num.end()); 10 // search for the minimal sum of continuous 11 for (int i = 0; i < num.size() - 2; i++) { 12 int j = i + 1; 13 int k = num.size() - 1; 14 while (j < k) { 15 sum = num[i] + num[j] + num[k]; 16 if (abs(sum - target) < abs(minSum - target)) { 17 minSum = sum; 18 if (minSum == target) return minSum; 19 } 20 (sum > target)? k--: j++; 21 } 22 } 23 return minSum; 24 } 25 };
标签:style blog http color os 使用 io ar for
原文地址:http://www.cnblogs.com/lancelod/p/3942764.html