ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

百度文心大模型 LeetCode 16. 最接近的三数之和 Rust实现

百度文心大模型    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
返回列表