class Solution {
public int threeSumClosest(int[] nums, int target) {
//评论区大佬思路 排序之后 前三个数之和就是其最小的
//即 他们把最小值s==nums[0]+nums[1]+nums[2] 然后 与循环体中sum做比较
//将最小的一个赋予mins
//三数之和与target差值最小
Arrays.sort(nums);
int res=0;
int left;
int right;
int sum;
int mins=100000;//保存最接近的距离 初始化为????
for(int i=0;i<nums.length;i++){
left=i+1;
right=nums.length-1;
while(left<right){
sum=nums[i]+nums[left]+nums[right];
if(Math.abs(sum-target)<mins){
res=sum;
}
mins=Math.min(mins,Math.abs(sum-target));
//如何返回最接近的sum
if(sum==target){
return sum;
}
if(sum<target) {
//while(left<right && nums[left]== nums[left+1]) ++left;//无需去重 如果要保存所有数组 那要去重
++left;
//continue;
}
if(sum>target){
//while(left<right && nums[right-1]==nums[right]) --right;
--right;
//continue;
}
}
}
return res;
}
}
leecode16——最接近的三数之和
最新推荐文章于 2025-12-02 21:20:38 发布
该博客介绍了如何使用排序和双指针技术解决寻找数组中三数之和最接近目标值的问题。通过遍历数组并设置两个指针分别从当前元素的下一个位置开始向右和从数组末尾向左移动,动态调整三数之和并更新最接近目标值的和。当找到相等的和时直接返回,否则根据和与目标值的大小关系调整指针位置。这种方法有效地减少了重复计算,提高了效率。
771

被折叠的 条评论
为什么被折叠?



