题目描述:
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).
这道题原理和前面的3Sum一样,不再说明。
solution:
int threeSumClosest(vector<int> &num, int target) { int n = num.size(); if(n <= 3) return accumulate(num.begin(),num.end(),0); sort(num.begin(),num.end()); int res = num[0] + num[1] + num[2]; int low, high; int sum; for (int i = 0;i < n-2;++i) { low = i + 1; high = n - 1; while (low < high) { sum = num[i] + num[low] + num[high]; if (abs(sum - target) < abs(res - target)) { if(sum == target) return sum; res = sum; } sum < target ? ++low : --high; } } return res; }
转载于:https://www.cnblogs.com/gattaca/p/4284708.html