/** * @param numbers: Give an array numbers of n integer * @param target: An integer * @return: return the sum of the three integers, the sum closest target. */ int threeSumClosest(vector<int> nums, int target) { // write your code here sort(nums.begin(), nums.end()); int closest = INT_MAX; for (size_t i = 0; i + 2 < nums.size(); ++ i) { int temp = twoSumClosest(nums, i + 1, target - nums[i]); if (abs(closest) > abs(temp)) { closest = temp; } } return closest + target; }
int threeSumClosest(vector<int> &num, int target) { if (3 > num.size()) return target; sort(num.begin(), num.end()); /* init of iRet & iMin(below) can't be 0x7fffffff, avoid abs overflow */ int iRet(999999), i(0); while (i < num.size() - 2) { int iTmp = twoSumClosest(num, i, target); if (abs(iTmp, target) < abs(iRet, target)) iRet = iTmp; ++i; while (num[i] == num[i-1] && i < num.size()) ++i; } return iRet; }
int threeSumClosest(vector<int>& nums, int target) { int differ = numeric_limits<int>::max(); sort(nums.begin(), nums.end()); for (int i = 0; i + 2 < nums.size(); i++) { if (i > 0 && nums[i] == nums[i - 1]) // pass duplicates. { continue; } auto diff = twoSumClosest(nums, i + 1, target - nums[i]); if (abs(diff) < abs(differ)) { differ = diff; } } return target + differ; }
/**3Sum Closest**/ int threeSumClosest(int* nums, int numsSize, int target) { void quicksort(int* s, int l, int r);//快排 int twoSumClosest(int* nums,int numsSize, int target);//子问题 2sum int* temp=(int*)malloc(sizeof(int) * (numsSize-1)); //new int[numsSize-1]; quicksort(nums,0,numsSize-1); int start=0; int* interResult=(int*)malloc(sizeof(int) * (numsSize)); //new int[numsSize]; for(int i=0;i<numsSize;i++){ start=0; for(int j=0;j<numsSize;j++){ if(i==j) continue; temp[start++]=nums[j]; } interResult[i]=nums[i]+twoSumClosest(temp,numsSize-1,target-nums[i]); } int result=interResult[0]; for(int k=1;k<numsSize;k++){ if(abs(result-target)>abs(interResult[k]-target)) result=interResult[k]; } return result; }