算法每日一练 (10)

news/2025/3/13 19:08:07/

💢欢迎来到张胤尘的技术站
💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥

文章目录

  • 算法每日一练 (10)
    • 最接近的三数之和
      • 题目描述
      • 解题思路
      • 解题代码
        • `c/c++`
        • `golang`
        • `lua`

官方站点: 力扣 Leetcode

算法每日一练 (10)

最接近的三数之和

题目地址:最接近的三数之和

题目描述

给你一个长度为 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
解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。

提示:

  • 3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

解题思路

  • 首先根据题意处理边界条件,当数组长度等于 3 时,不需要任何处理,直接返回和即可。
  • 然后,对目标数组进行排序,根据集合有序的特点再结合双指针 lr,与目标 target 进行比较:
    • 当前三元和小于目标值:移动左指针 l 增加。
    • 当前三元和大于目标值:移动右指针 r 减少。
    • 当前三元和等于目标值:由于题目答案唯一,则直接返回当前三元和即可。
  • 当每次移动指针之后,重新计算当前三元和,然后更新当前已经遍历到元素的三元和 min_sum 和最小三元和与目标 target 的差值 min_sum_df
  • 更新时,按照规则:当差值 min_sum_df 最小时,一定有 min_sumtarget 最为接近
  • 最后返回三元和 min_sum 即可。

解题代码

c/c++
#include <vector>
#include <algorithm>class Solution
{
public:int threeSumClosest(std::vector<int> &nums, int target){int sz = nums.size();if (sz == 3)return nums[0] + nums[1] + nums[2];std::sort(nums.begin(), nums.end());int min_sum = nums[0] + nums[1] + nums[2];int min_sum_df = std::abs(target - min_sum);int i = 0;while (i < sz - 2){int l = i + 1, r = sz - 1;while (l < r){int sum = nums[i] + nums[l] + nums[r];int df = std::abs(target - sum);if (df < min_sum_df){min_sum = sum;min_sum_df = df;}if (sum > target)--r;else if (sum < target)++l;elsereturn sum;}++i;}return min_sum;}
};
golang
package mainimport ("math""sort"
)func threeSumClosest(nums []int, target int) int {n := len(nums)if len(nums) == 3 {return nums[0] + nums[1] + nums[2]}sort.Ints(nums)min_sum := nums[0] + nums[1] + nums[2]min_sum_df := math.Abs(float64(target) - float64(min_sum))i := 0for i < n-2 {l, r := i+1, n-1for l < r {sum := nums[i] + nums[l] + nums[r]sum_df := math.Abs(float64(target) - float64(sum))if sum_df < min_sum_df {min_sum = summin_sum_df = sum_df}if sum < target {l++} else if sum > target {r--} else {return sum}}i++}return min_sum
}
lua
local function threeSumClosest(nums, target)local n = #numsif n == 3 thenreturn nums[1] + nums[2] + nums[3]endtable.sort(nums)local min_sum = nums[1] + nums[2] + nums[3];local min_sum_df = math.abs(target - min_sum)local i = 1while i < n - 1 dolocal l, r = i + 1, nwhile l < r dolocal sum = nums[i] + nums[l] + nums[r]local sum_df = math.abs(target - sum)if sum_df < min_sum_df thenmin_sum = summin_sum_df = sum_dfendif sum < target thenl = l + 1elseif sum > target thenr = r - 1elsereturn sumendendi = i + 1endreturn min_sum
end

🌺🌺🌺撒花!

如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。

在这里插入图片描述


http://www.ppmy.cn/news/1578857.html

相关文章

Git 的详细介绍及用法

一、Git 的优点 分布式版本控制 每个开发者都拥有完整的仓库副本&#xff0c;无需依赖中央服务器&#xff08;如 SVN&#xff09;。支持离线操作&#xff08;提交、查看历史、创建分支等&#xff09;。 高效的分支管理 创建和切换分支速度快&#xff08;几乎是瞬间完成&#x…

JVM、MySQL常见面试题(尽力局)

JVM篇 一.谈一谈JDK、JRE、JVM分别是什么&#xff0c;有什么联系&#xff1f; 1.JDK是Java工具包&#xff0c;里面包含了JRE、Javac编译器等。 2.JRE是java运行环境&#xff0c;里面包含了JVM、JavaSE标准库类等。 3.JVM是Java虚拟机&#xff0c;运行编译后的.class的文件&am…

《鸿蒙系统下AI模型训练加速:时间成本的深度剖析与优化策略》

在当今数字化浪潮中&#xff0c;鸿蒙系统凭借其独特的分布式架构与强大的生态潜力&#xff0c;为人工智能的发展注入了新的活力。随着AI应用在鸿蒙系统上的日益普及&#xff0c;如何有效降低模型训练的时间成本&#xff0c;成为了开发者与研究者们亟待攻克的关键课题。这不仅关…

备赛蓝桥杯之第XX届职业院校组省赛第七题:Github 明星项目统计

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

pdf修改内容:分享5款好用的工具

pdf修改内容用什么软件&#xff1f;PDF内容修改工具的便捷性很大地提升了我们的工作效率。通过这些工具&#xff0c;我们可以轻松地对PDF文档进行文字编辑、图片替换、页面调整等操作&#xff0c;无需繁琐的转换步骤。这些修改工具不仅操作简便&#xff0c;而且功能强大&#x…

Electron使用WebAssembly实现CRC-32 常用标准校验

Electron使用WebAssembly实现CRC-32 常用标准校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-32 常用标准格式校验的方式。 CRC-32 常用标准校验函数WebAssembly源文件…

Kotlin 中实现静态方法的几种方式

在 Kotlin 中&#xff0c;与 Java 不同&#xff0c;Kotlin 并不直接支持在类中定义静态方法&#xff08;static 方法&#xff09;。不过&#xff0c;Kotlin 提供了多种替代方式来实现类似的功能&#xff0c;例如通过 object 单例、companion object 伴生对象 或 顶级函数。以下…

2025年渗透测试面试题总结-华顺某信安-安全服务工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 华顺某信安-安全服务工程师 红蓝队经验 对于shiro漏洞了解多少 APP测试经历 xposed用的什么框架&#xff0c;有…