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).
/** * 冒泡排序 */ void BubleSort(int *arr,int len) { int k = 0,i = 0,j = 0; for(j = 0;j < len;j++) { for(i = 0;i < len-j-1;i++) { if(arr[i] > arr[i+1]) { k = arr[i]; arr[i] = arr[i+1]; arr[i+1] = k; } } } } int threeSumClosest(int* nums, int numsSize, int target) { BubleSort(nums,numsSize); int left = 0,mid = 0,right = 0; int minTarget = nums[0]+nums[1]+nums[2]; for(left = 0;left < numsSize-2;left++){ mid = left + 1; right = numsSize-1; while(mid < right) { int num = nums[left] + nums[mid] + nums[right]; if(abs(target-minTarget) > abs(target-num)) minTarget = num; if(num == target) return num; else if(num > target) { right--; } else mid++; } } return minTarget; }