尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
百度文心大模型    LeetCode 16. 最接近的三数之和 Rust实现
LeetCode 16. 最接近的三数之和 - Rust 实现解题思路排序 双指针1. 对数组排序 2. 固定第一个数 nums[i]双指针在 [i1, n-1] 中找两数之和 3. 计算当前三数之和与 target 的差值更新最接近的结果 4. 根据 sum 与 target 的大小关系移动指针时间复杂度: O(n²)空间复杂度: O(log n)排序栈空间Rust 实现usestd::cmp::Ordering;implSolution{pubfnthree_sum_closest(mutnums:Veci32,target:i32)-i32{letnnums.len();ifn3{return0;}nums.sort();// 排序// 初始化取前三个数的和letmutclosest_sumnumsnumsnums;foriin0..n-2{// 去重可选优化不去重也不影响正确性ifi0nums[i]nums[i-1]{continue;}letmutlefti1;letmutrightn-1;whileleftright{letcurrent_sumnums[i]nums[left]nums[right];// 如果恰好等于 target直接返回ifcurrent_sumtarget{returntarget;}// 更新最接近的值if(current_sum-target).abs()(closest_sum-target).abs(){closest_sumcurrent_sum;}// 根据当前和与 target 的关系移动指针matchcurrent_sum.cmp(target){Ordering::Less{left1;}Ordering::Greater{right-1;}Ordering::Equal{// 已在上面处理理论上不会走到这里returntarget;}}}}closest_sum}}完整可运行代码含测试usestd::cmp::Ordering;structSolution;implSolution{pubfnthree_sum_closest(mutnums:Veci32,target:i32)-i32{letnnums.len();ifn3{return0;}nums.sort();letmutclosest_sumnumsnumsnums;foriin0..n-2{ifi0nums[i]nums[i-1]{continue;}letmutlefti1;letmutrightn-1;whileleftright{letcurrent_sumnums[i]nums[left]nums[right];ifcurrent_sumtarget{returntarget;}if(current_sum-target).abs()(closest_sum-target).abs(){closest_sumcurrent_sum;}matchcurrent_sum.cmp(target){Ordering::Lessleft1,Ordering::Greaterright-1,Ordering::Equalunreachable!(),}}}closest_sum}}fnmain(){letsolSolution;// 测试用例 1letnums1vec![-1,2,1,-4];lettarget11;letresult1sol.three_sum_closest(nums1,target1);println!(Test 1: nums{:?}, target{},nums1,target1);println!( 最接近的三数之和 {},result1);// 输出: 2// 测试用例 2letnums2vec![0,0,0];lettarget21;letresult2sol.three_sum_closest(nums2,target2);println!(\nTest 2: nums{:?}, target{},nums2,target2);println!( 最接近的三数之和 {},result2);// 输出: 0// 测试用例 3letnums3vec![1,1,1,0];lettarget3-100;letresult3sol.three_sum_closest(nums3,target3);println!(\nTest 3: nums{:?}, target{},nums3,target3);println!( 最接近的三数之和 {},result3);// 输出: 2// 测试用例 4letnums4vec![1,2,4,8,16,32,64,128];lettarget482;letresult4sol.three_sum_closest(nums4,target4);println!(\nTest 4: nums{:?}, target{},nums4,target4);println!( 最接近的三数之和 {},result4);// 输出: 82// 测试用例 5大数letnums5vec![-100,-50,0,50,100];lettarget573;letresult5sol.three_sum_closest(nums5,target5);println!(\nTest 5: nums{:?}, target{},nums5,target5);println!( 最接近的三数之和 {},result5);// 输出: 50}运行结果Test 1: nums[-1, 2, 1, -4], target1 最接近的三数之和 2 Test 2: nums[0, 0, 0], target1 最接近的三数之和 0 Test 3: nums[1, 1, 1, 0], target-100 最接近的三数之和 2 Test 4: nums[1, 2, 4, 8, 16, 32, 64, 128], target82 最接近的三数之和 82 Test 5: nums[-100, -50, 0, 50, 100], target73 最接近的三数之和 50关键要点总结要点说明排序nums.sort()是双指针的前提初始化用前三个数初始化closest_sum提前返回current_sum target时直接返回更新条件(current_sum - target).abs() (closest_sum - target).abs()指针移动Ordering::Less→ leftOrdering::Greater→ right–借用规则nums按值传入再sort避免借用冲突与 Python 版本的差异对比项PythonRust变量声明closest_sum ...let mut closest_sum ...比较方式abs(a) abs(b)(a).abs() (b).abs()分支控制if/elsematch ... Ordering数组排序nums.sort()nums.sort()(相同)类型安全动态类型强类型所有变量需声明类型执行流程图解排序后: [-4, -1, 1, 2], target 1 初始化: closest_sum -4 (-1) 1 -4 i0: nums[i]-4, target_two 1 - (-4) 5 left1, right3: -121 5 → left 1 left2, right3: 123 5 → left 1 left3, right3: 结束 当前最优: -4 (| -4-1 | 5) i1: nums[i]-1, target_two 1 - (-1) 2 left2, right3: 123 2 → right - 1 left2, right2: 结束 当前最优: 2 (| 2-1 | 1) ✓ 更新 i2: nums[i]1, target_two 1 - 1 0 left3, right3: 结束 最终返回: 2LeetCode 16. 最接近的三数之和 - Rust 实现解题思路排序 双指针1. 对数组排序 2. 固定第一个数 nums[i]双指针在 [i1, n-1] 中找两数之和 3. 计算当前三数之和与 target 的差值更新最接近的结果 4. 根据 sum 与 target 的大小关系移动指针时间复杂度: O(n²)空间复杂度: O(log n)排序栈空间Rust 实现usestd::cmp::Ordering;implSolution{pubfnthree_sum_closest(mutnums:Veci32,target:i32)-i32{letnnums.len();ifn3{return0;}nums.sort();// 排序// 初始化取前三个数的和letmutclosest_sumnumsnumsnums;foriin0..n-2{// 去重可选优化不去重也不影响正确性ifi0nums[i]nums[i-1]{continue;}letmutlefti1;letmutrightn-1;whileleftright{letcurrent_sumnums[i]nums[left]nums[right];// 如果恰好等于 target直接返回ifcurrent_sumtarget{returntarget;}// 更新最接近的值if(current_sum-target).abs()(closest_sum-target).abs(){closest_sumcurrent_sum;}// 根据当前和与 target 的关系移动指针matchcurrent_sum.cmp(target){Ordering::Less{left1;}Ordering::Greater{right-1;}Ordering::Equal{// 已在上面处理理论上不会走到这里returntarget;}}}}closest_sum}}完整可运行代码含测试usestd::cmp::Ordering;structSolution;implSolution{pubfnthree_sum_closest(mutnums:Veci32,target:i32)-i32{letnnums.len();ifn3{return0;}nums.sort();letmutclosest_sumnumsnumsnums;foriin0..n-2{ifi0nums[i]nums[i-1]{continue;}letmutlefti1;letmutrightn-1;whileleftright{letcurrent_sumnums[i]nums[left]nums[right];ifcurrent_sumtarget{returntarget;}if(current_sum-target).abs()(closest_sum-target).abs(){closest_sumcurrent_sum;}matchcurrent_sum.cmp(target){Ordering::Lessleft1,Ordering::Greaterright-1,Ordering::Equalunreachable!(),}}}closest_sum}}fnmain(){letsolSolution;// 测试用例 1letnums1vec![-1,2,1,-4];lettarget11;letresult1sol.three_sum_closest(nums1,target1);println!(Test 1: nums{:?}, target{},nums1,target1);println!( 最接近的三数之和 {},result1);// 输出: 2// 测试用例 2letnums2vec![0,0,0];lettarget21;letresult2sol.three_sum_closest(nums2,target2);println!(\nTest 2: nums{:?}, target{},nums2,target2);println!( 最接近的三数之和 {},result2);// 输出: 0// 测试用例 3letnums3vec![1,1,1,0];lettarget3-100;letresult3sol.three_sum_closest(nums3,target3);println!(\nTest 3: nums{:?}, target{},nums3,target3);println!( 最接近的三数之和 {},result3);// 输出: 2// 测试用例 4letnums4vec![1,2,4,8,16,32,64,128];lettarget482;letresult4sol.three_sum_closest(nums4,target4);println!(\nTest 4: nums{:?}, target{},nums4,target4);println!( 最接近的三数之和 {},result4);// 输出: 82// 测试用例 5大数letnums5vec![-100,-50,0,50,100];lettarget573;letresult5sol.three_sum_closest(nums5,target5);println!(\nTest 5: nums{:?}, target{},nums5,target5);println!( 最接近的三数之和 {},result5);// 输出: 50}运行结果Test 1: nums[-1, 2, 1, -4], target1 最接近的三数之和 2 Test 2: nums[0, 0, 0], target1 最接近的三数之和 0 Test 3: nums[1, 1, 1, 0], target-100 最接近的三数之和 2 Test 4: nums[1, 2, 4, 8, 16, 32, 64, 128], target82 最接近的三数之和 82 Test 5: nums[-100, -50, 0, 50, 100], target73 最接近的三数之和 50关键要点总结要点说明排序nums.sort()是双指针的前提初始化用前三个数初始化closest_sum提前返回current_sum target时直接返回更新条件(current_sum - target).abs() (closest_sum - target).abs()指针移动Ordering::Less→ leftOrdering::Greater→ right–借用规则nums按值传入再sort避免借用冲突与 Python 版本的差异对比项PythonRust变量声明closest_sum ...let mut closest_sum ...比较方式abs(a) abs(b)(a).abs() (b).abs()分支控制if/elsematch ... Ordering数组排序nums.sort()nums.sort()(相同)类型安全动态类型强类型所有变量需声明类型执行流程图解排序后: [-4, -1, 1, 2], target 1 初始化: closest_sum -4 (-1) 1 -4 i0: nums[i]-4, target_two 1 - (-4) 5 left1, right3: -121 5 → left 1 left2, right3: 123 5 → left 1 left3, right3: 结束 当前最优: -4 (| -4-1 | 5) i1: nums[i]-1, target_two 1 - (-1) 2 left2, right3: 123 2 → right - 1 left2, right2: 结束 当前最优: 2 (| 2-1 | 1) ✓ 更新 i2: nums[i]1, target_two 1 - 1 0 left3, right3: 结束 最终返回: 2
RELATED

相关推荐

深度学习实战第二篇:模型训练 80% 的时间在搞数据,你准备好了吗?

深度学习实战第二篇:模型训练 80% 的时间在搞数据,你准备好了吗?

从标注到裁图到增强,AOI 项目的数据流水线全拆解开头:模型不准?90% 是数据问题 你有没有过这种经历? 花了一周训练模型,精度只有 70%。你调了半天超参数,换了更大的模型,精度还是上不去。 然后你…

📅 2026/10/12 9:08:36
【亲测有效】VS Code 已安装中文语言包却仍是英文的解决办法

【亲测有效】VS Code 已安装中文语言包却仍是英文的解决办法

VS Code 已安装中文语言包却仍是英文:一次由语言包文件损坏引发的排查记录 文章目录VS Code 已安装中文语言包却仍是英文:一次由语言包文件损坏引发的排查记录一、问题现象描述二、排查过程1. 确认显示语言配置2. 确认语言包是否已安装3. 检查日志与翻译…

📅 2026/10/15 22:04:54
正点原子精英板ST-linkV2无法烧录

正点原子精英板ST-linkV2无法烧录

故障现象:精英板硬件连接正常,能够识别到 ST-Link V2(具备设备名称),程序正常编译但是无法烧录。解决办法:01:更换电脑的供电 USB 和 ST-Link V2 的 USB 接口;02:使用正点…

📅 2026/9/8 5:38:40
MORE NEWS

更多资讯

📰

万江低压电工证报名怕被坑?通过率揭秘告诉你真相

万江低压电工证报名怕被坑?通过率揭秘告诉你真相 你是不是也在为万江低压电工证报名发愁?不知道哪家靠谱,怕被中介坑,还担心通过率低?别急,这篇文章就带你搞清楚万江低压电工证的报名流程、考试难度和真实通过率,帮你少走弯路。…

📰

考电工证好还是二建好?郑州报考避坑指南,学历不高怕报不上名怎么办

考电工证好还是二建好?郑州报考避坑指南,学历不高怕报不上名怎么办 你是不是也这样,想着考个证,但又怕自己学历不够,连报名资格都达不到?别急,我来给你说说【考电工证好还是二建好】这事儿,尤其在郑州,如果你是新乡房建工程从业者,那这个选择就更关…

📰

浦东新区祝桥电工证怎么考才能不白花钱?全国通用的电工证考试全攻略

浦东新区祝桥电工证怎么考才能不白花钱?全国通用的电工证考试全攻略 怕考不过白交培训费?别急,我来给你划重点。浦东新区祝桥电工证考试虽然门槛不低,但如果你准备得当,完全有可能一次通过,拿到全国通用的电工证。本文从你最关心的问题切入,帮你理清考…

📰

河南汝州考电工证官方报名入口在哪?工地太忙根本没时间复习考试

河南汝州考电工证官方报名入口在哪?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是无数在河南汝州从事建筑工人的真实写照。尤其是在电工证报考过程中,很多人因为时间紧张、复习不到位而屡屡失败,甚至耽误了工期和薪资发放。如果你也在寻找…

📰

陇南考取安装电工证怎么报名?学历不高也能报上名!

陇南考取安装电工证怎么报名?学历不高也能报上名! 你是不是也担心, 学历不高怕报不上名 ?别慌, 陇南考取安装电工证 的报名门槛其实没有你想象的那么高。今天我们就来聊一聊, 怎么报名…

📰

高压电工证用途广泛么多久拿证全流程避坑指南

高压电工证用途广泛么多久拿证全流程避坑指南 怕考不过白交培训费?高压电工证用途广泛么?别再被培训机构忽悠了!现在很多人以为考个证就一定能找好工作,但实际情况是,考前不了解政策、考后不会查询证书,最后只能白白浪费钱。这篇文章就从信阳浉河区转岗…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬