美文网首页
LeetCode第16题: threeSumClosest(C语

LeetCode第16题: threeSumClosest(C语

作者: 闫品品 | 来源:发表于2019-08-26 11:39 被阅读0次

    上一题:LeetCode第15题: threeSum(C语言)
    思路:首先将数组进行快速排序,从左至右开始遍历,找到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题目解题方法,帮助和引导同学们开阔学习算法思路,由于个人能力和精力的局限性,也会参考其他网站的代码和思路,如有侵权,请联系本人删除。
    下一题:LeetCode第17题: letterCombinations(C语言)

    相关文章

      网友评论

          本文标题:LeetCode第16题: threeSumClosest(C语

          本文链接:https://www.haomeiwen.com/subject/rxcrectx.html