尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

百度文心大模型    LeetCode 16. 最接近的三数之和 Python3实现 LeetCode 16. 最接近的三数之和 - Python3 实现解题思路排序 双指针1. 对数组排序 2. 固定第一个数 nums[i]双指针在 [i1, n-1] 中找两数之和 3. 计算当前三数之和与 target 的差值更新最接近的结果 4. 根据 sum 与 target 的大小关系移动指针时间复杂度: O(n²)空间复杂度: O(log n)排序栈空间Python3 实现fromtypingimportListclassSolution:defthreeSumClosest(self,nums:List[int],target:int)-int:nlen(nums)ifn3:return0nums.sort()# 排序# 初始化取前三个数的和closest_sumnumsnumsnumsforiinrange(n-2):# 去重可选优化不去重也不影响正确性ifi0andnums[i]nums[i-1]:continuelefti1rightn-1whileleftright:current_sumnums[i]nums[left]nums[right]# 如果恰好等于 target直接返回ifcurrent_sumtarget:returntarget# 更新最接近的值ifabs(current_sum-target)abs(closest_sum-target):closest_sumcurrent_sum# 根据当前和与 target 的关系移动指针ifcurrent_sumtarget:left1else:right-1returnclosest_sum测试代码defmain():solSolution()# 测试用例 1nums1[-1,2,1,-4]target11result1sol.threeSumClosest(nums1,target1)print(fTest 1: nums{nums1}, target{target1})print(f 最接近的三数之和 {result1})# 输出: 2# 解释: (-1 2 1 2) 与 target1 最接近# 测试用例 2nums2[0,0,0]target21result2sol.threeSumClosest(nums2,target2)print(f\nTest 2: nums{nums2}, target{target2})print(f 最接近的三数之和 {result2})# 输出: 0# 测试用例 3nums3[1,1,1,0]target3-100result3sol.threeSumClosest(nums3,target3)print(f\nTest 3: nums{nums3}, target{target3})print(f 最接近的三数之和 {result3})# 输出: 2# 测试用例 4nums4[1,2,4,8,16,32,64,128]target482result4sol.threeSumClosest(nums4,target4)print(f\nTest 4: nums{nums4}, target{target4})print(f 最接近的三数之和 {result4})# 输出: 82if__name____main__:main()输出结果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关键要点总结要点说明排序nums.sort()是双指针的前提初始化用前三个数初始化closest_sum避免用无穷大提前返回current_sum target时直接返回已是最优更新条件abs(current_sum - target) abs(closest_sum - target)指针移动sum target → leftsum target → right–与三数之和区别本题不需要去重但可选且只需返回一个值执行流程图解排序后: [-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 left2, right3: 123 5 → left left3, right3: 结束 当前最优: -4 (| -4-1 | 5) i1: nums[i]-1, target_two 1 - (-1) 2 left2, right3: 123 2 → right-- left2, right2: 结束 当前最优: 2 (| 2-1 | 1) ✓ 更新 i2: nums[i]1, target_two 1 - 1 0 left3, right3: 结束 最终返回: 2与 LeetCode 15 对比对比项15. 三数之和16. 最接近的三数之和返回值所有不重复的三元组列表一个最接近的整数值去重必须严格去重不需要但可优化提前终止无找到等于 target 可直接返回核心逻辑相同排序双指针相同排序双指针LeetCode 16. 最接近的三数之和 - Python3 实现解题思路排序 双指针1. 对数组排序 2. 固定第一个数 nums[i]双指针在 [i1, n-1] 中找两数之和 3. 计算当前三数之和与 target 的差值更新最接近的结果 4. 根据 sum 与 target 的大小关系移动指针时间复杂度: O(n²)空间复杂度: O(log n)排序栈空间Python3 实现fromtypingimportListclassSolution:defthreeSumClosest(self,nums:List[int],target:int)-int:nlen(nums)ifn3:return0nums.sort()# 排序# 初始化取前三个数的和closest_sumnumsnumsnumsforiinrange(n-2):# 去重可选优化不去重也不影响正确性ifi0andnums[i]nums[i-1]:continuelefti1rightn-1whileleftright:current_sumnums[i]nums[left]nums[right]# 如果恰好等于 target直接返回ifcurrent_sumtarget:returntarget# 更新最接近的值ifabs(current_sum-target)abs(closest_sum-target):closest_sumcurrent_sum# 根据当前和与 target 的关系移动指针ifcurrent_sumtarget:left1else:right-1returnclosest_sum测试代码defmain():solSolution()# 测试用例 1nums1[-1,2,1,-4]target11result1sol.threeSumClosest(nums1,target1)print(fTest 1: nums{nums1}, target{target1})print(f 最接近的三数之和 {result1})# 输出: 2# 解释: (-1 2 1 2) 与 target1 最接近# 测试用例 2nums2[0,0,0]target21result2sol.threeSumClosest(nums2,target2)print(f\nTest 2: nums{nums2}, target{target2})print(f 最接近的三数之和 {result2})# 输出: 0# 测试用例 3nums3[1,1,1,0]target3-100result3sol.threeSumClosest(nums3,target3)print(f\nTest 3: nums{nums3}, target{target3})print(f 最接近的三数之和 {result3})# 输出: 2# 测试用例 4nums4[1,2,4,8,16,32,64,128]target482result4sol.threeSumClosest(nums4,target4)print(f\nTest 4: nums{nums4}, target{target4})print(f 最接近的三数之和 {result4})# 输出: 82if__name____main__:main()输出结果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关键要点总结要点说明排序nums.sort()是双指针的前提初始化用前三个数初始化closest_sum避免用无穷大提前返回current_sum target时直接返回已是最优更新条件abs(current_sum - target) abs(closest_sum - target)指针移动sum target → leftsum target → right–与三数之和区别本题不需要去重但可选且只需返回一个值执行流程图解排序后: [-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 left2, right3: 123 5 → left left3, right3: 结束 当前最优: -4 (| -4-1 | 5) i1: nums[i]-1, target_two 1 - (-1) 2 left2, right3: 123 2 → right-- left2, right2: 结束 当前最优: 2 (| 2-1 | 1) ✓ 更新 i2: nums[i]1, target_two 1 - 1 0 left3, right3: 结束 最终返回: 2与 LeetCode 15 对比对比项15. 三数之和16. 最接近的三数之和返回值所有不重复的三元组列表一个最接近的整数值去重必须严格去重不需要但可优化提前终止无找到等于 target 可直接返回核心逻辑相同排序双指针相同排序双指针
返回列表