最接近的三数之和-力扣16-java排序+双指针

news2024/9/20 22:41:12

一、题目描述

给你一个长度为 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

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/3sum-closest

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、运行结果

三、解题思路

这题的思路和力扣第15题的思路几乎是一致的,同样是采用排序+双指针的方式,可以参考另一篇博客:https://blog.csdn.net/LJH132465/article/details/129003854

while循环体内注释掉的内容是为了直接跳过重复的组合,不用再多计算一次,可要可不要,测试发现,加上这部分运行需要的时间好像更长了。。。不知道是什么原因hhhh

四、AC代码

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int len = nums.length;
        Arrays.sort(nums);
        //最接近的和, 三数与target最小的差绝对值
        int ans = nums[0]+nums[1]+nums[2];
        for(int i=0; i<len-2; ++i){
            int j = i+1, k = len-1;
            while(j < k){
                // if(j > i+1) {  // 重复的情况,不用再计算一次
                //     while(nums[j]==nums[j-1] && j<k) j++;
                // }
                // if(k < len-1){
                //     while(nums[k] == nums[k+1] && k>j) k--;
                // }
                // if(j == k) break;
                int curSum = nums[i]+nums[j]+nums[k];
                if(Math.abs(target-curSum) < Math.abs(target-ans)) {
                    ans = curSum;
                }
                if(curSum > target) k--;  //k前移
                else if(curSum < target) j++;
                else return ans;    //相等的情况
                
            }
        }
        return ans;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Multisim14 安装包及安装教程

Multisim14 安装教程 Multisim14下载地址&#xff1a;Kevin的学习站–安装包下载地址 Multisim14 简介&#xff1a; Multisim 14 是美国国家仪器有限公司&#xff08;National Instrument&#xff0c;NI&#xff09;推出的以 Windows 为基础、符合工业标准的、具有 SPICE 最佳仿…

三数之和-力扣15-java排序+双指针

一、题目描述给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意&#xff1a;答案中不可以包含重复的三元组。…

好用的研发管理看板工具有哪些?10款主流看板管理软件盘点

10大企业看板工具软件&#xff1a;1.软件开发项目看板 PingCode&#xff1b;2.通用看板软件 Worktile&#xff1b;3.开源看板软件 Wekan&#xff1b;4.免费看板软件 Trello&#xff1b;5.个人和小团队的看板软件 Todoist &#xff1b;6.开源免费看 Kanboard&#xff1b;7.面向个…

想考个PMP证书,怎么报考啊?

先说报名条件&#xff1a; PMP报名条件说难也不难&#xff0c;但也是有条件的&#xff0c;看下面的视频&#xff0c;最难满足的就是题主担心的工作经验&#xff0c;其实这个也并不一定要项目管理经验&#xff0c;年纪合适&#xff0c;一般来说也是可以考的。 PMP考试时间 23年…

微服务实战--高级篇:分布式缓存 Redis

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xf…

数据结构 - 优先级队列(堆)

文章目录前言1.介绍优先级队列2. 认识堆3. 实现优先级队列3.1 了解优先级队列的构造方法&#xff1a;3.2 使用优先级队列解决问题&#xff1a;总结前言 本篇PriorityQueue优先级队列的介绍其底层是堆&#xff0c;关于堆的认识&#xff0c;使用优先级队列能解决的一些问题&…

day12_Django的基本操作

文章目录创建django项目项目-各个文件的含义app-各个文件的含义MVT运行&#xff0c;查看是否创建项目框架成功ORM迁移->在数据库中形成对应的 表通过类名 对象的方法完成数据库的增删查改操作通过模型类&#xff08;shell&#xff09;的方法操作数据表后台管理进入后台http:…

dvwa靶场的搭建过程

dvwa靶场的搭建过程 记录一下自己重新开始学习web安全之路①。 首先一个要搭建一个网站需要的准备 服务器 – 操作系统 windows linux&#xff08;可以将电脑当成服务器&#xff09; 数据库 MySQL sql server Oracle access 、、、、作用&#xff1a;存储数据 中间件 apac…

零基础学MySQL(五)-- 详细讲解数据库中的常用函数

目录&#x1f387;一、聚合函数1️⃣count 函数&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;基本练习&#xff08;3&#xff09;注意细节2️⃣sum 函数&#xff08;1&#xff09;基本语法&#xff08;2&#xff09;基本练习&#xff08;3&#xff09;注意细节3…

opencv常用函数

1)读视频 img cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) if vc.isOpened():ret, frame vc.read() else:ret False while ret:#此处省略具体的操作ret, frame vc.read() # 读下一帧 vc.release() 2&#xff09;保存视频 def mk_video_writer(vc, path&#xff0c;frame_…

MASA Stack 1.0 发布会讲稿——生态篇

2022年运营回顾 贡献者 首先感谢贡献者们为MASA Stack社区所作的积极贡献&#xff0c;这些贡献者给我们提出了很多宝贵的建议&#xff0c;更是积极的提交PR帮助我们一起让产品更健壮&#xff0c;更完善&#xff0c;还在各种场合推广我们的解决方案&#xff0c;非常给力&#x…

智能工厂以MES系统为基础,实现"信息化减人,自动化换人"

MES是一种生产信息化的管理系统&#xff0c;它适用于制造业的车间实施层面。MES能够为企业提供生产数据、项目看板、库存、成本、工装、生产计划、计划排程、质量、人力资源、采购、生产过程控制、底层数据集成分析、上层数据集成分解等管理模块&#xff0c;为企业打造一个扎实…

史上最详细JUC教程之Synchronized与锁升级详解

在Java早期版本中&#xff0c;synchronized属于重量级锁&#xff0c;效率低下&#xff0c;因为监视器锁&#xff08;monitor&#xff09;是依赖于底层的操作系统的Mutex Lock来实现的&#xff0c;挂起线程和恢复线程都需要转入内核态去完成&#xff0c;阻塞或唤醒一个Java线程需…

JavaSE学习day4_02 数组(超级重点)

3.数组 3.1什么是数组 数组就是存储数据长度固定的容器&#xff0c;存储多个数据的数据类型要一致。 3.2数组定义格式 3.2.1第一种&#xff08;常用&#xff09; 数据类型[] 数组名 示例&#xff1a; int[] arr; double[] arr; char[] arr; 3.2.2第二种(在…

pandas——字符串处理【建议收藏】

pandas——字符串处理 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮助到你学习&#xff0c;记得点赞收藏评论一下哦 文章目录pandas——字符串处理一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.cat() 拼接字符串2.split()切片字符串…

Viper+MSF:靶机代理转发上线学习

本文仅为代理转发学习&#xff0c;在本地环境测试验证&#xff0c;无其它目的&#xff0c;请勿用于未经授权的测试 说明&#xff1a; 之前学习的代理转发上线&#xff0c;近期也做实验通过Viper&#xff0c;利用MSF实现了多重代理转发上线靶机&#xff0c;过程有些繁琐&#x…

【Linux】-- 进程信号(认识、应用)

目录 信号初识 生活中的信号 Linux中的信号 产生信号 核心转储 软件条件产生信号的样例 系统调用接口 raise kill abort 闹钟 硬件异常产生信号 如何理解除0错误 如何理解野指针 / 越界错误 总结 信号初识 &#xff08;信号和信号量是两个东西&#xff09; 生…

java web命令学习笔记

本博文源于笔者自学java web&#xff0c;博文包含了jsp脚本代码、jsp声明、jsp表达式、注释、jsp指令等内容说明&#xff0c;并书写对应的案例。即可观看&#xff0c;也可收藏。 文章目录1.jsp脚本代码2.JSP声明3.jsp表达式4.注释5.JSP指令5.1 page指令5.2 include指令1.jsp脚本…

《霍格沃茨之遗》席卷Steam周榜 哈迷们出手了!

自上上周起&#xff0c;《霍格沃茨之遗》就打败了长期霸榜王Steam Deck&#xff0c;夺得了Steam周榜冠军&#xff0c;果然魔法的力量不容小觑。 而在最新公开的周榜&#xff08;2 月 6 日~2 月 12 日&#xff09;中&#xff0c;《霍格沃茨之遗》更是强势席卷榜单&#xff0c;四…

​网易游戏实时 HTAP 计费风控平台建设

本文整理自网易互娱资深工程师, Flink Contributor, CDC Contributor 林佳&#xff0c;在 FFA 实时风控专场的分享。本篇内容主要分为五个部分&#xff1a; 实时风控业务会话会话关联的 Flink 实现HTAP 风控平台建设提升风控结果数据能效发展历程与展望未来 众所周知&#xff…