当前位置: 首页 > news >正文

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;}
};

http://www.lryc.cn/news/379145.html

相关文章:

  • JSON.parse 解析NaN, Infinity, -Infinity失败
  • 【计算机】我不允许还有人不知道数据库是什么
  • 制作WIFI二维码,实现一键扫描连接WIFI
  • 数据结构-图的基本概念
  • 【HarmonyOS NEXT 】鸿蒙generateBarcode (码图生成)
  • python测试工程师 之 unittest框架总结
  • 微服务中的相关概念
  • 常见的设计模式
  • Camtasia2024中文版最新电脑录屏剪辑神器!
  • 【性能优化】表分区实践最佳案例
  • 力扣SQL50 项目员工 I ROUND AVG
  • nuscenes 数据集学习笔记
  • 在Windows上用MinGW编译OpenCV项目运行全流程
  • 用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配
  • 大二学生眼中的Netty?基于Netty实现内网穿透!
  • JavaStringBuffer与StringBuilder
  • 云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长
  • 深度揭秘:深度学习框架下的神经网络架构进化
  • MySQL的DML语句
  • Wireshark的基本用法以及注意事项
  • 集团门户网站的设计
  • Tomcat基础详解
  • 【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)
  • Microsoft Visual C++ Redistributable 【安装包】【高速下载】
  • MFC绘制哆啦A梦
  • 网络编程(TCP协议,UDP协议)
  • 读取Jar包下文件资源的问题及解决方案
  • C++ 反转一个二进制串
  • 黑神话悟空-吉吉国王版本【抢先版】
  • 【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)