题目
Number: 16
Difficulty: Medium
Tags: Array, Two Pointers
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).
题解
在数组中选择三个数的和最接近给定值,返回这三个数的和。
采用先排序,时间复杂度O(NlogN),然后固定一个数,首尾遍历另外两个数,记录每次的和,如果和与给定值的差的绝对值变小,更新。时间复杂度O(N*N)。
代码
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int a, b, c, sum, result;
int n = nums.size();
result = nums[0] + nums[1] + nums[2];
for(int i = 0; i < n; i++)
{
a = i;
b = i + 1;
c = n - 1;
while(b < c)
{
sum = nums[a] + nums[b] + nums[c];
if(sum == target)
return target;
if(abs(target - sum) < abs(target - result))
result = sum;
sum > target ? c-- : b++;
}
}
return result;
}