16. 最接近的三数之和(双指针+减去多余步骤)

news2024/9/22 17:36:34

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

双指针+减去多余步骤

当我们在遍历的时候,三数之和为,sum = nums[i]+ numsli]+ nums[k],判断sum是不是与target最近的数。
使用双指针的方法:
我们要先对数组进行排序,使得它是有序的,在使用双指针时,更好的来控制哪一个指针移动。

我们需要分类讨论:
1.如果sum = target,直接返回sum。
2.如果三数之和与target的距离比ans与target的距离更近,我们将sum赋值给ans。

if (Math.abs(sum-target)<Math.abs(ans-target))
        ans=sum;

3.如果j<k,判断sum的值是大于还是小于target,如果是小于,因为是排了序的,所以我们使得j++,使得sum的更接近target。如果是大于,因为是排了序的,所以我们使得k- -,使得sum的更接近target。

减去一些多余的步骤
1.设sum = nums[i]+ numsi+1]+ nums[i+2]。此时sum > target,由于数组已排序,表示了在往后面走只会使得sum变大,离target越来越远。所以这种时候可以直接break外层循环了。不过还是要判断sum是否比ans离target更近。

2.设sum = nums[i]+ nums[n-2]+ nums[n -1]。此时sum < target,由于数组已排序,表示了nums[i]加上后面任意两个数都不超过sum,在往前面走只会使得sum变大,离target越来越远。此时不应该break,而是continue,因为nums[i],后面的数字可能存在加上nums[n-2]+ nums[n -1],sum更大的情况。在之前要判断sum是否比ans离target更近。

3.当i >0并且nums[i]= nums[i-1],那么此时nums[i]和后面数字相加的情况,在之前为nums[i-1]时候就已经算过了,直接continue外层循环。

测试代码


class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
       int n=nums.length;
       int sum=0,ans=1<<30;
        for (int i = 0; i <n-2; i++) {
            //后面有相同数字时直接跳过
            if (i>0&&nums[i]==nums[i-1]){
                continue;
            }

            //加的两个数字在往后走,三数之和,只会离target越来越远
            sum=nums[i]+nums[i+1]+nums[i+2];
            if (sum>target){
                if ((sum-target)<Math.abs(ans-target))
                    ans=sum;
                break;
            }

            //加的两个数字在往前走,三数之和,只会离target越来越远
            sum=nums[i]+nums[n-2]+nums[n-1];
            if ((sum)<target){
                if ((target-sum)<Math.abs(ans-target))
                    ans=sum;
                continue;
            }

            int k=n-1,j=i+1;
          while (j<k){
              sum=nums[i]+nums[j]+nums[k];

              if (sum==target)return sum;

              if (Math.abs(sum-target)<Math.abs(ans-target))
                  ans=sum;

              if (sum<target) j++;
              else k--;
          }
        }
        return  ans;
    }
}

测试结果

image.png{:width=400}

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

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

相关文章

JSP环境搭建教程(保姆级!!)

简介 Java Server Pages (JSP) 是一种由 Sun Microsystems 开发的用于创建动态网页的技术。它是 Java EE (Java Enterprise Edition) 技术的一部分&#xff0c;允许开发者在 HTML 中嵌入 Java 代码&#xff0c;从而实现动态内容的生成。 JSP 主要由两部分组成&#xff1a;静态…

LiveGBS流媒体平台GB/T28181功能-如何对接海康大华宇视等监控摄像头报警消息报警订阅国标报警信息

LiveGBS流媒体平台GB/T28181功能-如何对接海康大华宇视等监控摄像头报警消息报警订阅国标报警信息 1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅 1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3…

红外雨量计(光学雨量传感器)在预防地质灾害中怎样发挥作用

红外雨量计&#xff08;光学雨量传感器&#xff09;在预防地质灾害中怎样发挥作用 红外雨量计是一种利用红外线原理测量雨量的设备。在预防地质灾害中&#xff0c;红外雨量计可以发挥以下作用&#xff1a; 1.准确测量雨水的降雨量。地质灾害往往与雨水的降雨量密切相关&#x…

【Java EE】-JVM

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 雨下整夜 我的爱溢出就像雨水 ——《七里香》 主要内容&#xff1a;JDK&#xff0c;JRE&#xff0c;JVM三者之间的联系。JVM内存区域划分&#xff1a;本地方法栈…

物联网技术的智能配电室综合监控系统设计

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;配电室是电力系统的重要基础设施&#xff0c;可以保障供配电系统的安全稳定运行。但是&#xff0c;配电室数量多、部署分散、管理复杂&#xff0c;人工现场巡检管理方式费时费工、错误率高&#xff0c;如果发生故障隐…

智能工厂-亿发生产型企业信息化ERP管理系统,打造智能制造工业

对于制造业来说&#xff0c;生产就是发展的动力。传统制造工厂在生产管理中存在很多不足和缺点&#xff0c;流程管理混乱&#xff0c;生产状态不稳定。在制造工厂中实施机械生产工厂ERP管理系统可以解决生产管理中低效率问题&#xff0c;使得制造工厂向着更科学化、智能化的方向…

ETHERNET/IP转RS485/RS232网关profinet与Ethernet通讯卡

网络数据传输遇到的协议不同、数据互通麻烦等问题&#xff0c;一直困扰着大家。然而&#xff0c;现在有一种神器——远创智控YC-EIP-RS485/232&#xff0c;它将ETHERNET/IP网络和RS485/RS232总线连接在一起&#xff0c;让数据传输更加便捷高效。 那么&#xff0c;它是如何实现…

Jmeter接口关联(一)【使用json层级方式提取值】与python中使用层级方式提取值 完成接口关联

文章目录 前言一、按照 json 的路径来提取 ​​​​​​​&#xff08;1&#xff09;成功匹配到数据的案例&#xff08;按照层级匹配&#xff09;&#xff08;2&#xff09;失败未匹配到数据的案例&#xff08;没有按照层级匹配&#xff09;json提取器二、使用完整的接口关联&a…

地方废物回收机构管理系统

方废物回收机构管理系统的开发运用java技术&#xff0c;MIS的总体思想&#xff0c;以及MYSQL等技术的支持下共同完成了该系统的开发&#xff0c;实现了地方废物回收机构的信息化&#xff0c;使用户体验到更优秀的地方废物回收机构管理&#xff0c;管理员管理操作将更加方便&…

奔赴猿田地,开垦一亩三分产

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 大家好&#xff0c;很久没开荒了&#xff0c;最近一直在想着要不要开始分享最近的一些小技术&#xff0c;看到互联网泡沫化日益严重&#xff0c;程序猿下岗失业&#xff0c;bibi皆是。但不管外界…

Linux如何设置固定IP

首先&#xff0c;Linux的默认网关和DNS解析都是一个地址。 IPV4 IP地址是32位2进制 前缀默认是24但是格式还是得写 DNS解析域名&#xff0c;类似Map&#xff0c;根据域名寻找IP DHCP 如果是自动设置IP&#xff0c;就是由他来自行分配&#xff0c;但是手动的话&#xff0c;就需…

软件测试-基础篇

一、接口的认识 什么是接口 电脑&#xff1a;USB&#xff0c;投影机&#xff08;数据传输&#xff09; 软件&#xff1a;API&#xff0c;application program interface.微信提现与充值&#xff0c;支付宝支付&#xff0c;银联支付接口。&#xff08;鉴权码&#xff1a;token…

港联证券|暑期亲子游和避暑游需求旺盛 数据要素产业价值有望加速释放

上周五&#xff0c;A股再度回调&#xff0c;沪指失守3200点&#xff0c;创业板指、科创50指数跌约1%。截至收盘&#xff0c;沪指跌0.28%报3196.61点&#xff0c;深成指跌0.73%报10888.55点&#xff0c;创业板指跌1.05%报2169.21点&#xff0c;科创50指数跌1.02%&#xff1b;两市…

Vue生态及实践 - Nuxt

Nuxt.js Nuxt.js - Vue.js 通用应用框架 | Nuxt.js 中文网 Nuxt.js 中文教程_w3cschool 开源社区仁人志士创建了开箱可用的&#xff1a;Nuxt.js框架&#xff0c;帮助我们更快的实现ssr的同构。 Nuxt.js是一个基于Vue.js的通用应用框架它是对客户端&#xff0c;服务端基础架…

LeetCode 打卡day59--单调栈

一个人的朝圣 — LeetCode打卡第59-60天 知识总结 Leetcode 739. 每日温度题目说明代码说明 Leetcode 496. 下一个更大元素 I题目说明代码说明 Leetcode 84. 柱状图中最大的矩形题目说明代码说明 知识总结 今天做了单调栈的三道题 总结了一个模版套路: 寻找下一个更大的数 f…

Spring IOC - Bean的扫描

Component及其衍生注解&#xff1a;Configuration、Controller、Service、Repository标记的类&#xff0c;被Spring IOC扫描到后&#xff0c;即可被容器管理起来。其原理基本涵盖在AnnotationConfigApplicationContext构造函数体的三行代码里。 public AnnotationConfigApplic…

学校一键式报警器如何使用

学校一键式报警器通常是在紧急情况下使用的&#xff0c;例如火灾、恶性事件等。以下是一般的使用方法&#xff1a;1. 紧急情况发生时&#xff0c;发现危险或有人身安全受到威胁&#xff0c;迅速找到一键式报警器。2. 按下报警器上的按钮&#xff0c;通常是一个明显的红色按钮。…

查看docker运行状态,与查看防火墙运行状态

安装docker这里不细述了&#xff0c;可以通过 docker -version 查看安装的版本&#xff0c;出现成功就表示安装是ok的 查看docker状态是否启动状态&#xff0c;出现running就表示成功 systemctl status docker 如果没有则需要输入启动命令来启动 systemctl start docker 没报错…

前端学习——Web API (Day2)

Dom事件基础 事件监听 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

干货 | 联通政企数据运营体系建设

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们将从以下几个方面为大家介绍我们的项目&#xff0c;首先第一部分是需求分析&#xff0c;然后是数据提取及处理&#xff0c;接着样本定义与分布、特征粗筛与模型选择、特征精筛与评分卡建模…