LeetCode 16.最接近的三数之和(C++)
链接
https://leetcode.cn/problems/3sum-closest/description/
题目
给你一个长度为 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
思路:
先排序,使数据有序,以保证后续可以使用双指针来计算”三数之和“。记录第一次”三数之和“和target的距离(记为sub),并记录此时”三数之和“的值(记为ret)。当"三数之和“大于target时,比较此时"三数之和“和target的距离和sub的大小关系。当此时"三数之和“和target的距离<sub时,更新sub,并更新ret。然后再缩小”三数之和“的值。当”三数之和“小于target时,比较此时"三数之和“和target的距离和sub的大小关系。当此时"三数之和“和target的距离<sub时,更新sub,并更新ret。然后增加”三数之和“的值。当”三数之和“等于target时,意味着重合,距离为0,因此是最小的,更新ret后返回。
代码实现:
class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int ret , sub;for(int i = 0 ; i < nums.size(); i++)//遍历取得“三数之和“的第一个数{int left = i + 1 , right = nums.size() - 1;if(i == 0) // 记录首次的 sub 和 ret{sub = abs(target - (nums[i] + nums[left] + nums[right]));ret = (nums[i] + nums[left] + nums[right]);}while(left < right){if(nums[i] + nums[left] + nums[right] < target) {if(abs(target - (nums[i] + nums[left] + nums[right])) < sub) // 更新sub和ret{sub = abs(target - (nums[i] + nums[left] + nums[right]));ret = nums[i] + nums[left] + nums[right];}left++;// 增加 nums[left] 的值,从而使得 "三数之和"的值增大}else if (nums[i] + nums[left] + nums[right] == target) //更新ret并返回{ret = nums[i] + nums[left] + nums[right];return ret;}else{if(abs(target - (nums[i] + nums[left] + nums[right])) < sub) // 更新sub和ret{sub = abs(target - (nums[i] + nums[left] + nums[right]));ret = nums[i] + nums[left] + nums[right];}right--;//减小 nums[right]的值,从而使得“三数之和”的值变小}}}return ret;}
};
相关文章:
LeetCode 16.最接近的三数之和(C++)
链接 https://leetcode.cn/problems/3sum-closest/description/ 题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例1 输入&a…...
JSON.parse 解析NaN, Infinity, -Infinity失败
背景 JSON.parse() 方法解析字符串时, 如果字符串包含NaN, Infinity, -Infinity会报错。因为我们需要先将NaN, Infinity, -Infinity替换成字符类型,再做转换 解决方法 function convert(str) {str str.replace(/NaN/g, "NaN");str str.re…...
【计算机】我不允许还有人不知道数据库是什么
数据库是计算机科学中的一个核心概念,它是用于存储、检索、管理和处理数据的系统。在现代的软件开发和信息技术中,数据库扮演着至关重要的角色。以下是关于数据库的一些基本要点: 数据存储: 数据库提供了一个结构化的方式来存储数据,使得数据可以高效地组织和访问。它通过…...
制作WIFI二维码,实现一键扫描连接WIFI
在现代社会,Wi-Fi已成为我们日常生活中不可或缺的一部分。无论是在家庭、办公室还是公共场所,我们都希望能够快速方便地连接到Wi-Fi网络。下面小编就来和大家分享通过制作WIFI二维码,来实现一键扫描就可以连接WIFI的方法。连接WIFI不用在告诉…...
数据结构-图的基本概念
图的定义 图时由非空的顶点集合和一个描述顶点之间关系的集合组成。可以定义为: G表示一个图,V表示点集,E表示边集。集合E的每一个二元组都包含两个值和,表示…...
【HarmonyOS NEXT 】鸿蒙generateBarcode (码图生成)
本模块支持将字符串转换为二维码或条形码,目前已支持的码制式为EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF-14、QR Code、Data Matrix、PDF417、Aztec。暂时不支持多功能码生成。 起始版本:4.1.0(11) 导入模块 import {…...
python测试工程师 之 unittest框架总结
unittest 学习目标unittest 框架的基本使⽤⽅法(组成)断⾔的使⽤ (让程序⾃动的判断预期结果和实际结果是否相符)参数化(多个测试数据, 测试代码写⼀份 传参)⽣成测试报告 复习pythonunittest 框架的介绍核⼼要素(组成)1. TestCase 测试⽤例, 这个测试⽤例是 unittest 的组成部…...
微服务中的相关概念
Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software)…...
常见的设计模式
设计模式是一套被反复使用的、代码设计经验的总结。它们被用来解决软件开发中的某些常见问题,提高代码的可维护性、可扩展性和重用性。设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。以下是一些常见的设计模式及其简要说明: …...
Camtasia2024中文版最新电脑录屏剪辑神器!
大家好,今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版!这款软件真的太棒了,它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣,那么一定要尝试一下这款神器哦! Camtasia2024win-正式…...
【性能优化】表分区实践最佳案例
背景 随着数字化建设的持续深入,企业的业务规模迎来了高速发展,其数据规模也呈现爆炸式增长,如果继续使用传统解决方案,将所有数据存储在一个表中,对数据的查询和维护效率将是一个巨大的挑战,在这个背景下…...
力扣SQL50 项目员工 I ROUND AVG
Problem: 1075. 项目员工 I 👨🏫 参考题解 Code select project_id,ROUND(AVG(e.experience_years),2) as average_years FROMproject as p LEFT JOINemployee as e ONp.employee_id e.employee_id GROUP BYp.project_id;...
nuscenes 数据集学习笔记
目录 数据信息类型: 数据信息类型: Map & Camera(png), Lidar(激光雷达) & Radar(雷达)(pcd), Json 文件结构(以v1.0-mini为例): maps: 存放Map的png文件samples: 存放Camera, Lidar, Radar关键非结构化数据信息, 带标注sweeps: 存放Camera, Lidar, Radar 次要非结构…...
在Windows上用MinGW编译OpenCV项目运行全流程
一、准备软件 OpenCV源码CMake工具MinGW工具链(需要选用 posix 线程版本:原因见此) 二、操作步骤 官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建…...
用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配
数据可视化大屏 基于 Vue3、Typescript、DataV、ECharts5 框架的大数据可视化(大屏展示)开发。此项目vue3实现界面,采用新版动态屏幕适配方案,全局渲染组件封装,支持数据动态刷新渲染、内部DataV、ECharts图表都支持自…...
大二学生眼中的Netty?基于Netty实现内网穿透!
爷的开场白 掘金的朋友们大家好!我是新来的Java练习生 CodeCodeBond! 这段时间呢,博主在学习Netty,想做一个自己感兴趣好玩的东西,那就是内网穿透!!(已经实现主要代理功能但有待优化…...
JavaStringBuffer与StringBuilder
StringBuffer、StringBuilder 文章目录 StringBuffer、StringBuilderStringBuffer和StringBuilder的理解可变性分析对于String对于StringBuilder 常用方法执行效率对比 StringBuffer和StringBuilder的理解 String 不可变的字符序列 StringBuffer 可变的字符序列 JDK1.0声明&…...
云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长
竹叶青茶以其别具一格的风味与深厚的历史底蕴,一直被誉为茶中瑰宝。历经千年的传承与创新,竹叶青不仅坚守着茶叶品质的极致追求,更在数字化的浪潮中,率先打破传统,以科技力量赋能品牌,成为茶行业的领军者。…...
深度揭秘:深度学习框架下的神经网络架构进化
深度学习框架下的神经网络架构经历了从基础到复杂的显著进化,这一进程不仅推动了人工智能领域的突破性进展,还极大地影响了诸多行业应用。本文旨在深入浅出地揭示这一进化历程,探讨关键架构的创新点及其对现实世界的影响。 引言:…...
MySQL的DML语句
文章目录 ☃️概述☃️DML☃️添加数据☃️更新和删除数据☃️DML的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言,用来 定义数据库对象(数据库、表、字段) ● DML: 数据操作语言,用来对数据库表中的数据进行增删改 …...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
