听说三数之和是你梦碎的地方?Leetcode每日刷题(day1)(下)

简介: 听说三数之和是你梦碎的地方?Leetcode每日刷题(day1)

二、最接近的三数之和


来源:leetcode:16、最接近的三数之和


1、题目描述

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。


返回这三个数的和。


假定每组输入只存在恰好一个解。


2、题目示例


1669254880231.jpg


3、分析

这道题目和三数之和简直不能太像了,我们还是同样的思路,三指针暴力穷举,只不过我们需要加一个待定返回值ret,当有更接近target的三数之和出现的时候,我们要对这个数ret更新,其余要比三数之和简单多了,因为题目告诉我们必定有解,那么我们连特殊情况都不需要考虑。


4、上代码

int cmp(const void* x,const void* y)
{
    return *(int*)x-*(int*)y;
}
int threeSumClosest(int* nums, int numsSize, int target)
{
    qsort(nums,numsSize,sizeof(int),cmp);
    int i=0;
    int ret=nums[0]+nums[1]+nums[2];
    for(int i=0;i<numsSize;++i)
    {
        int left=i+1;
        int right=numsSize-1;
        while(left<right)
        {
            int sum=nums[i]+nums[left]+nums[right];
            if(abs(ret-target)>abs(sum-target))
                ret=sum;
            if(sum==target)
                return sum;
            else if(sum>target)
                right--;
            else
                left++;
        }
    }
    //更新最近的
    return ret;
}


这里博主借用了一个abs函数,这个函数主要是为了求绝对值。


1669254912116.jpg


它的头文件是(math.h).


最后,推荐给大家一款神器,相信大家在刷题的时候经常遇到一个问题:我代码和答案一模一样,为啥会出错?我是不是废了?怎么也看不出来,

那么,推荐大家一款对比代码的神器App,在软件管家就可以免费下载:


1669254946101.jpg

1669254958326.jpg

1669254968240.jpg





相关文章
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
17天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
17天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
17天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
17天前
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
【LeetCode刷题】专题三:二分查找模板
|
17天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
17天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
17天前
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
【LeetCode刷题】滑动窗口思想解决:最大连续1的个数 III、将x减到0的最小操作数
|
17天前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串