LeetCode - 16 最接近的三数之和

news2024/12/25 9:05:53

目录

题目来源

题目描述

示例

提示

题目解析

算法源码


题目来源

16. 最接近的三数之和 - 力扣(LeetCode)

题目描述

给你一个长度为 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
  • -10^4 <= target <= 10^4

题目解析

本题其实就是LeetCode - 15 三数之和_伏城之外的博客-CSDN博客扩展题,都是找三元组。找三元组的逻辑和leetcode 15的逻辑一致,都是利用双指针,这块逻辑可以参考链接博客解析。

区别在于,本题要找的三元组,是和最接近target的,而不是完全等于target的。

因此,当三元组的和sum:

  • sum == target时,可以直接返回此时的sum作为题解,因此sum与target的差距为0,是肯定最接近的。
  • sum != target,此时我们需要求解 abs(sum - target) 差距,保留最小差距对应sum,作为一个可能解,之后关于l, r指针的运动,需要看sum和target的具体大小关系
  1. 如果 sum > target,那么下一次我们应该 r--,来减小三元组和,来让sum接近target
  2. 如果 sum < target,那么下一次我们应该 l++,来增加三元组和,来让sum接近target

JS算法源码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function (nums, target) {
  nums.sort((a, b) => a - b);

  let ans;
  let minDiff = Infinity;

  for (let i = 0; i < nums.length - 2; i++) {
    let l = i + 1;
    let r = nums.length - 1;

    while (l < r) {
      const sum = nums[i] + nums[l] + nums[r];

      if (sum == target) {
        return sum;
      } else {
        const diff = Math.abs(sum - target);
        if (diff < minDiff) {
          minDiff = diff;
          ans = sum;
        }

        if (sum > target) {
          r--;
        } else {
          l++;
        }
      }
    }
  }

  return ans;
};

最接近的三数之和 - 提交记录 - 力扣(LeetCode)

Java算法源码

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);

        int minDiff = Integer.MAX_VALUE;
        int ans = 0;

        for(int i = 0; i < nums.length; i++) {
            int l = i + 1;
            int r = nums.length - 1;

            while(l < r) {
                int sum = nums[i] + nums[l] + nums[r];

                if(sum == target) {
                    return sum;
                } else {
                    int diff = Math.abs(sum - target);
                    if(diff < minDiff) {
                        minDiff = diff;
                        ans = sum;
                    }

                    if (sum > target) {
                        r--;
                    } else {
                        l++;
                    }
                }
            }
        }

        return ans;
    }
}

最接近的三数之和 - 提交记录 - 力扣(LeetCode)

Python算法源码

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()

        minDiff = -1
        ans = 0

        for i in range(len(nums)):
            l = i + 1
            r = len(nums) - 1

            while l < r:
                total = nums[i] + nums[l] + nums[r]

                if total == target:
                    return total
                else:
                    diff = abs(total - target)

                    if minDiff == -1 or diff < minDiff:
                        minDiff = diff
                        ans = total

                    if total > target:
                        r -= 1
                    else:
                        l += 1

        return ans

最接近的三数之和 - 提交记录 - 力扣(LeetCode)

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

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

相关文章

HNU-操作系统OS-作业2(15-22章)

OS_homework_2 这份文件是OS_homework_2 by计科210X wolf 202108010XXX 文档设置了目录,可以通过目录快速跳转至答案部分。 第15章 运行程序OS-homework/vm-mechanism/relocation.py 15.1 用种子 1、2 和 3 运行,并计算进程生成的每个虚拟地址是处于界限内还是界限外? 如…

Python + HDF5 因子计算与 DolphinDB 一体化因子计算方案对比

在量化交易中&#xff0c;基于金融市场的 L1/L2 的报价和交易高频数据来进行高频因子计算&#xff0c;是非常常见的投研需求。目前国内全市场十年的 L2 历史数据约为 20 ~ 50T&#xff0c;每日新增的数据量约为 10 ~ 20G。传统的关系数据库如 MS SQL Server 或 MySQL 已经很难支…

2023届【校招】安全面试题和岗位总结(字节、百度、腾讯、美团等大厂)

写在前面 个人强烈感觉面试因人而异&#xff0c;对于简历上有具体项目经历的同学&#xff0c;个人感觉面试官会着重让你介绍自己的项目&#xff0c;包括但不限于介绍一次真实攻防/渗透/挖洞/CTF/代码审计的经历 > 因此对于自己的项目&#xff0c;面试前建议做一次复盘&#…

Zigbee学习(四)入网流程及抓包分析

Zigbee学习系列文章 Zigbee学习&#xff08;一&#xff09;架构及入网 Zigbee学习&#xff08;二&#xff09;认识Profile和Cluster Zigbee学习&#xff08;三&#xff09;Z-Stack代码框架解析 文章目录 Zigbee学习系列文章前言一、概述二、入网报文解析1.Management Permit J…

双向交错CCM图腾柱无桥单相PFC学习仿真与实现(1)系统问题分解

目录 前言 系统硬件架构 系统软件架构 仿真实现 仿真效果 总结 前言 目前正在做双向交错CCM图腾柱无桥单相PFC的项目&#xff0c;硬件拓扑兼容三相和单相的PFC&#xff0c;三相PFC功能目前已经完成&#xff0c;准备把单相的PFC学习和开发过程记录一下&#xff0c;以及后面…

基于CH32F103的DAC播放WAV功能

一、理论 1.1 DAC理论 数字信号转化为电压信号&#xff0c;实现扬声器不同频率的发声。 12位DAC&#xff0c;表达范围0-4095 1.2音频wav理论 1.2.1 wav文件格式解析 wav 文件一般由3个区块组成&#xff1a;RIFF chunk、Format chunk 和 Data chunk。 RIFF chunk&#xff…

Vivado 下 IP核之单端口 RAM 读写

目录 Vivado 下 IP 核之单端口 RAM 读写 1、RAM 简介 2、实验任务 3、程序设计 3.1、RAM IP 核配置 3.2、时序图讲解 1、写优先模式的时序图如下所示&#xff1a; 2、读优先模式的时序图如下所示&#xff1a; 3、不变模式的时序图如下所示&#xff1a; 3.3、顶层模块…

mysql 数据库 不同数据类型字段设置长度大小、取值范围 及 存储空间

学习目标&#xff1a; 学习的目标 了解不同数据类型字段设置长度大小&#xff0c;从而 在使用 mysql 数据时为使用的字段设置适当的长度 。 学习内容&#xff1a; 学习的内容 整数型字符串型TEXT时间型 总结&#xff1a; 提示&#xff1a;总结 1、整数型 1、整数型的数值…

STM32队列

目录 什么是队列&#xff1f; 队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 队列相关 API 函数 1. 创建队列 参数&#xff1a; 2. 写队列 参数&#xff1a; 返回值&#xff1a; 3. 读队列 参数&#xff1a; 返回值&#xf…

找工作第一弹——三件套基础巩固

目录 前言HTML篇表格结构a的两种打开方式自定义列表单选&#xff0c;多选音视频标签 CSS篇伪元素清楚浮动固定定位fixedemCSS三角 JS细节篇原型链字符串拼接的方法递归 JS内置对象sort的升序和降序字符串大写和小写Objects对象的方法date的用法数字取整数组的最大值与最小值 We…

ROS中使用VLP16激光雷达获取点云数据

ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为&#xff1a;Ubuntu20.04 ROS Noetic 需要将激光雷达与PC连接&#xff0c;然后在设置>网络>有线中将IPv4改为手动&#xff0c;并且地址为192.168.1.100&#xff0c;子网掩码为255.255.255.0&#xff0c…

leetcode61. 旋转链表(java)

旋转链表 leetcode61. 旋转链表题目描述 解题思路代码演示链表专题 leetcode61. 旋转链表 Leetcode链接&#xff1a; https://leetcode.cn/problems/rotate-list/ 题目描述 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例…

浅析 xml 数据格式文件

浅析 xml 数据格式文件 xml ( Extensible Markup Language ) 全称 -> 可拓展的标记语言&#xff1b; xml文件的主要用途&#xff1a;xml文件主要用于数据的 传输 和 存储&#xff0c;并不是展示&#xff1b; xml标签与html的区别&#xff1a;节点的标签使用方式和 html 十分…

【产品经理】企业的产品增长之路

英特尔前CEO安迪格鲁夫有本书叫做《Only the Paranoid Survive》&#xff0c;全文的中心思想是警示他人&#xff0c;要居安思危&#xff0c;唯有打破常规&#xff0c;不拘泥于现状才能生存。 一、为何企业都在关注增长&#xff1f; 1. 诺基亚的贱卖 13年市值曾位居全球上市公…

HNU-操作系统OS-作业1(4-9章)

这份文件是OS_homework_1 by计科2102 wolf 202108010XXX 文档设置了目录,可以通过目录快速跳转至答案部分。 第四章 4.1用以下标志运行程序:./process-run.py -l 5:100,5:100。CPU 利用率(CPU 使用时间的百分比)应该是多少?为什么你知道这一点?利用 -c 标记查看你…

Spring中如何获取Bean方法上的自定义注解

文章目录 背景描述场景复现问题追踪解决方案扩展思考 背景描述 项目中需要扫描出来所有 标注了自定义注解A的Service里面标注了自定义注解B的方法 来做后续处理。 基本的思路就是通过Spring提供的ApplicationContext#getBeansWithAnnotation反射 来实现。 但是&#xff0c;随…

【Spring】核心与设计思想

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

11111111111

def cosine_similarity(vector_a, vector_b): “”" 计算两个向量之间的余弦相似度 :param vector_a: 向量 a :param vector_b: 向量 b :return: distance “”" vector_a np.mat(vector_a) vector_b np.mat(vector_b) num float(vector_a * vector_b.T) denom n…

华为OD机试真题 Java 实现【预定酒店】【2022Q4 100分】

一、题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。 二、输入描述 第一行: n,k,x 第二行: A[o] A[1] A[2]…A[n-1] 三…

djiango orm简单实现增删改查

目录 一、配置数据库1.1 在settings.py文件中找到DATABASES &#xff0c;配置数据库连接&#xff0c;这里用的是mysql 二、切换操作数据库的模块三、 创建一个app并注册3.1创建一个app3.2 注册app 三、在app1定义模型类四、迁移数据库&#xff0c;使用以下命令&#xff0c;生成…