[LeetCode] 3Sum Closest

来源:互联网 发布:翻牌抽奖软件 编辑:程序博客网 时间:2024/06/03 20:33
[Problem]

Given an array S of n integers, find threeintegers in S such that the sum is closest to a givennumber, target. Return the sum of the three integers. You mayassume 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的博客
原创粉丝点击