Leetcode刷题(16. 最接近的三数之和)

Leetcode刷题(16. 最接近的三数之和)

  • 一.题目
  • 二.代码(C)
  • 三.提交记录
  • 四.备注

一.题目

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

二.代码(C)

int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}
int distance(int a,int b)
{
    if(a<b)
        return b-a;
    else
        return a-b;
}
int threeSumClosest(int* nums, int numsSize, int target)
{
    int length = distance(nums[0]+nums[1]+nums[2],target);
    int temp1,temp2 = nums[0]+nums[1]+nums[2];
    int i=0;
    int left,right;
    qsort(nums,numsSize,sizeof(int),cmpfunc);
    while(i<numsSize-2)
    {
        left = i+1;
        right = numsSize-1;
        while(left<right)
        {
            temp1 = nums[left]+nums[right]+nums[i];
            //printf("temp1 = %d",temp1);
            if(temp1>target)
            {
                right--;
                if(distance(temp1,target)<length)
                {
                    length = distance(temp1,target);
                    temp2 = temp1;
                }
            }
            else if(temp1<target)
            {
                left++;
                if(distance(temp1,target)<length)
                {
                    length = distance(temp1,target);
                    temp2 = temp1;
                }
            }
            else
                return target;
        }
        i++;
    }
    return temp2;
}

三.提交记录

在这里插入图片描述
Leetcode刷题(16. 最接近的三数之和)_第1张图片

四.备注

沿用15题的思路。

你可能感兴趣的:(Leetcode,C语言)