思路
双指针:首先利用Arrays.sort()函数对数组进行排序,通过枚举中间位置的那个数,题目就变为了双指针
解题过程
指针边界(right>i\&\&left
Code
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int len=nums.length;
int ans=nums[0]+nums[1]+nums[2];
int num=Math.abs(ans-target);
int left=0;
int right=len-1;
for(int i=1;i<len-1;i++){
left=0;
right=len-1;
while(right>i&&left<i){
if(Math.abs(nums[i]+nums[left]+nums[right]-target)<num){
ans=nums[i]+nums[left]+nums[right];
num=Math.abs(nums[i]+nums[left]+nums[right]-target);
}
if(nums[i]+nums[left]+nums[right]<=target)left++;
else right--;
}
}
return ans;
}
}
作者:菜卷
链接:https://leetcode.cn/problems/3sum-closest/solutions/2927721/zui-jie-jin-de-san-shu-zhi-he-by-ashi-ji-jmb8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文链接: https://blog.csdn.net/qq_53568730/article/details/142466994