思路
双指针:首先利用Arrays.sort()函数对数组进行排序,通过枚举中间位置的那个数,题目就变为了双指针
解题过程
指针边界(right>i&&left<i),当三数之和小于等于target时,left++,反之right–
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。