16. 最接近的三数之和

173 阅读1分钟

核心代码

for () {
	//确定第一个数
	while () {
    	//双指针操作
    }
}

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int res = nums[0] + nums[1] + nums[2]; // [0,1,2] 0
        Arrays.sort(nums);// 先排序!!
        for (int i = 0; i < nums.length; i++) {
            int left = i + 1;
            int right = nums.length - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                if (sum == target) { // 找到target 直接返回
                    return sum;
                }
                if (Math.abs(sum - target) <= Math.abs(res - target)) {//更新
                    res = sum;
                } 
                // 日常移动
                if(sum > target) {
                    right--;
                } else if(sum < target) {
                    left++;
                }
            }

        }
        return res;
    }
}