程式語言 - LeetCode - C - 16. 3Sum Closest



參考資訊:
https://algo.monster/liteproblems/16

題目:


解答:

int mysort(const void *a, const void *b)
{
    return (*(int *)a) - (*(int *)b);
}

int threeSumClosest(int* nums, int numsSize, int target)
{
    int i = 0;
    int ret = 1 << 30;

    qsort(nums, numsSize, sizeof(int), mysort);

    for (i = 0; i < numsSize; i++) {
        int l = i + 1;
        int r = numsSize - 1;

        while (l < r) {
            int cur = nums[i] + nums[l] + nums[r];

            if (cur == target) {
                return cur;
            }

            if (abs(cur - target) < abs(ret - target)) {
                ret = cur;
            }

            if (cur < target) {
                l += 1;
            }
            else {
                r -= 1;
            }
        }
    }

    return ret;
}