【leetcode】16. 最接近的三数之和

#define INT_MAX 2147483647
int cmp(const void* a, const void* b){
    return *(int*)a - *(int*)b; // 快排构造递增序列
}
int threeSumClosest(int* nums, int numsSize, int target){
    int cur=0;
    int left = cur + 1, right = numsSize - 1, minVal = INT_MAX, ret=0, temp;

    qsort(nums, numsSize, sizeof(int), cmp);
    while (cur < numsSize - 2){

        left = cur + 1; right = numsSize - 1;

        while (left < right){
            temp = nums[cur] + nums[left] + nums[right];
            if (abs( temp - target) < minVal){
                minVal = abs(temp - target);
                ret = temp;
            }
            if (temp == target)
                return temp;        
            else if (temp < target){
                while (nums[left] == nums[++left] && left < right);
            }            
            else{
                while (nums[right] == nums[--right] && left < right);
            }                    
        }
        while (nums[cur] == nums[++cur] && cur < numsSize - 2);
    }
    return ret;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14100379.html