上一題:LeetCode第15題: threeSum(C語言)
思路:首先將數(shù)組進行快速排序陆错,從左至右開始遍歷,找到sum = target的臨界點i金赦,對于i左側音瓷,sum < target;對于i右側,sum > target;并分別將其存到min和max中夹抗,然后分別比較max與target的距離绳慎、min與target的距離,返回其中距離最近的一個。
void quickSort(int *nums, int left, int right){
if(left < right){
int i = left;
int j = right + 1;
int pivot = nums[i];
do{
do{
i++;
}while(nums[i] < pivot);
do{
j--;
}while(nums[j] > pivot);
if(i < j){
int temp1 = nums[i];
nums[i] = nums[j];
nums[j] = temp1;
}
}while(i < j);
int temp2 = nums[left];
nums[left] = nums[j];
nums[j] = temp2;
quickSort(nums, left, j - 1);
quickSort(nums, j + 1, right);
}
}
int threeSumClosest(int* nums, int numsSize, int target){
quickSort(nums, 0, numsSize - 1);
int min = nums[0];
int max = nums[0];
int sum = 0;
for(int i = 0; i < numsSize - 2; i++){
sum = nums[i] + nums[i + 1] + nums[i + 2];
if(sum < target)
min = sum;
else if(sum == target)
return target;
else{
max = sum;
break;
}
}
if(max - target >= target - min)
return min;
else
return max;
}
本系列文章偷线,旨在打造LeetCode題目解題方法磨确,幫助和引導同學們開闊學習算法思路,由于個人能力和精力的局限性声邦,也會參考其他網(wǎng)站的代碼和思路乏奥,如有侵權,請聯(lián)系本人刪除亥曹。
下一題:LeetCode第17題: letterCombinations(C語言)