您的位置:首页 > 其它

[LeetCode] 3Sum Closest

2017-09-10 20:40 363 查看
[Problem]
Given an array S of n integers, find three
integers in S such that the sum is closest to a given
number, target. Return the sum of the three integers. You may
assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).


[Analysis]

先对数据按照从小到大排序,然后从头到尾遍历各组合,注意剪枝。

[Solution]
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function

// sort data
sort(num.begin(), num.end());
int len = num.size();

// initial result
int res = num[0] + num[1] + num[2];

// closest
int min = target > res ? target - res : res - target;

// search
for(int i = 0; i < len - 2; ++i){
for(int j = i + 1; j < len - 1; ++j){
for(int k = j + 1; k < len; ++k){
// 3sum
int sum = num[i] + num[j] + num[k];

// closest
int clo = target > sum ? target - sum : sum - target;
if(clo < min){
res = sum;
min = clo;
}

// cut
if(sum > target)break;
}
}
}
return res;
}
};

说明:版权所有,转载请注明出处。Coder007的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: