LeetCode题目之腾讯精选练习(50题):最接近的三数之和

发布时间:2026/7/28 15:20:33
LeetCode题目之腾讯精选练习(50题):最接近的三数之和 题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:例如给定数组 nums[-121-4],和 target1.与 target 最接近的三个数的和为2.(-1212).算法实现publicstaticintThreeSumClosest(int[]nums,inttarget){intchaint.MaxValue;intt0;Array.Sort(nums);intlengthnums.Length;intfirst,last,sum;for(inti0;ilength-2;){firsti1;lastlength-1;do{if(firstlast)break;sumnums[first]nums[i]nums[last];if(Math.Abs(target-sum)cha){tsum;chaMath.Abs(sum-target);}if(sumtarget){while(firstlastnums[first]nums[first]);}else{while(firstlastnums[last]nums[--last]);}}while(firstlast);while(i1nums.Lengthnums[i]nums[i]);}returnt;}执行结果执行结果: 通过执行用时: 132 ms, 在所有 C# 提交中击败了100.00%的用户内存消耗: 23.7 MB, 在所有 C# 提交中击败了7.41%的用户小的总结对之前三数之和稍加改进即可即目标值由0改为任意值。官方解答更为简洁清楚。publicstaticintThreeSumClosest2(int[]nums,inttarget){Array.Sort(nums);intansnums[0]nums[1]nums[2];intstart,end,sum;for(inti0;inums.Length-2;i){starti1;endnums.Length-1;while(startend){sumnums[start]nums[end]nums[i];if(Math.Abs(target-sum)Math.Abs(target-ans))anssum;if(sumtarget)end--;elseif(sumtarget)start;elsereturnans;}}returnans;}