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——最接近的三数之和
最新推荐文章于 2024-11-11 21:19:25 发布