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).
解题思路:(1)先对数组进行希尔排序
(2)第一个数从1到n依次枚举
(3)设置两个指针分别指向第二个数和第三个数,第一个指针从前往后,第二个指针从后往前
int threeSumClosest(int* nums, int numsSize, int target) {
//希尔排序
for (int Incre = numsSize/2; Incre > 0; Incre /= 2)
{
for (int i = Incre; i < numsSize; i++)
{
int temp = nums[i];
int j;
for (j = i; j >= Incre; j -= Incre)
{
if (temp < nums[j-Incre])
nums[j] = nums[j-Incre];
else
break;
}
nums[j] = temp;
}
}
int sum;
int minsum = nums[0]+nums[1]+nums[2];
for (int i = 0; i < numsSize; i++)
{
int j = i+1;
int k = numsSize-1;
while (j < k)
{
sum = nums[i]+nums[j]+nums[k];
if (sum == target)
return target;
else if (sum > target)
k--;
else
j++;
if (abs(sum-target) < abs(minsum-target))
{
minsum = sum;
}
}
}
return minsum;
}