【LeetCode: 16. 最接近的三数之和 | 双指针专题 】

news/2024/12/22 1:24:46/

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 双指针
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 16. 最接近的三数之和

⛲ 题目描述

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

返回这三个数的和。

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

示例 1:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例 2:

输入:nums = [0,0,0], target = 1
输出:0

提示:

3 <= nums.length <= 1000
-1000 <= nums[i] <= 1000
-104 <= target <= 104

🌟 求解思路&实现代码&运行结果


⚡ 双指针

🥦 求解思路

  1. 首先我们要先弄明白题目的意思,抓住解题的关键点,题目让我们求解的是最接近的三数之和,暴力解法可以想到,但是时间超限,不能通过,我们就需要考虑其它的解法。
  2. 数组中元素的顺序是不会影响我们最终结果的,所以我们对其进行一个排序,再通过双指针单调性来进行一个求解。
  3. 最接近的三数之和怎么求解? 先找到最开始三个位置的和,然后之后通过双指针再找到更加接近的三数之和即可。
  4. 枚举每一个开始的位置,初始两个指针分别指向开始位置的下一个元素位置和整个数组中最后一个元素的位置。每次计算三个指针指向的三个元素之和,并和最接近的三数之和进行比较。
  5. 如果三个元素之和等于目标值,最接近的就是目标值。
  6. 如果三个元素之和小于目标值,则将左侧指针右移一位。
  7. 如果三个元素之和大于目标值,则将右侧指针左移一位。
  8. 移动指针之后,重复上述操作,直到找到答案。
  9. 有了基本的思路,接下来我们就来通过代码来实现一下。

🥦 实现代码

class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int n=nums.length;int ans=nums[0]+nums[1]+nums[2];for(int i=0;i<n;i++){int x=nums[i];if(i>0&&nums[i-1]==x){continue;}int left=i+1;int right=n-1;while(left<right){int sum=nums[left]+nums[right]+x;if(Math.abs(target-sum)<Math.abs(target-ans)) ans=sum;if(sum>target) right--;else if(sum<target) left++;else return sum;}}return ans;}
}

🥦 运行结果

时间复杂度&空间复杂度

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/804568.html

相关文章

VMware16.0安装教程和创建

许可证&#xff1a; ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV8设置网络 添加镜像 下载centos7镜像网址https://mirrors.aliyun.com/centos/7/isos/x86_64/?spma2c6h.25603864.0.0.d7724511YPrZpg win10镜像地址https://ww…

vue app状态栏颜色

if(window.plus){ plus.navigator.setStatusBarBackground(#0344fb); }

uni-app 获取手机状态栏高度

<template> <view> <view :style"height:statusBarHeightpx"></view> </view> </template> <script> export default{ data(){ return{ statusBarHeight:0,//状态栏高度 } }, onLoad(){ this.statusBarHeight plus.nav…

准确获取系统顶部状态栏,顶部导航栏的高度

看到许多文章通过获取 decorView 的 top 或者 getWindowManager().getDefaultDisplay() 的方法来获取状态栏的高度&#xff0c;在转屏或者切换的时候会比较容易出错&#xff0c;这里推荐一种更加准确的方法&#xff1a; 在Frameworks目录下&#xff0c;状态栏的高度和导航栏的…

仿iphone顶部状态栏_无需第三方APP,苹果iPhone手机屏幕录制的方法

有些小伙伴在使用iPhone手机玩游戏的时候&#xff0c;很想把自己玩的游戏录个高清视频&#xff0c;再添加自己的原声解说&#xff0c;做个教程&#xff0c;分享到网上或发送给朋友&#xff0c;或者看到喜欢的直播需要录制下来&#xff0c;以后欣赏或分享给他人&#xff0c;但不…

移动端:js如何获取当前手机的状态栏高度

废话不多说&#xff0c;直接直接上代码&#xff1a; //获取当前手机状态栏高度 let immersed 0; let ms (/Html5Plus\/.\s\(.*(Immersed\/(\d\.?\d*).*)\)/gi).exec(navigator.userAgent); if(ms&&ms.length>3) { // 当前环境为沉浸式状态栏模式immersed parseF…

iOS--状态栏的调整控制方法

在不同的需求场景中&#xff0c;我们会遇到把状态栏字体颜色显示为深色或者浅色&#xff0c;也可能会遇到需要隐藏状态栏的情况&#xff0c;下面就是对状态栏的一些基本操作&#xff0c;注意&#xff0c;代码是写到Viewcontroller中哦&#xff0c;直接写就是了&#xff0c;系统…

ios底部栏设计规范_iOS平台的移动UI设计规范

一、状态栏和导航栏 1、状态栏(Status Bars)就是iPhone最上方用来显示时间、运营商信息、电池电量的那个很窄的区域。 2、导航栏(Navigation Bars)就是状态栏之下的区域,一般来说导航栏中间是页面标题,左右是放置功能图标的区域。 在iPhone6/7/8设计中,状态栏的高度为20pt(4…