[LeetCode 016] 3Sum Closest

3Sum Closest

  • 遍历数组nums,依次取出一个数nums[i],在i之后的数列中找两个数最接近target
    • 第一个数固定,后两个数按类似2Sum处理。
    • sum小于target时,需要将左边的数向右移动。
    • sum大于target时,需要将右边的数向左移动。
  • 设置midDif存储最小的difference,不断的跟新midDif
  • 设置result存储三个数的和,当midDif更新时,result也更新。

Implementation

public class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int minDif = Integer.MAX_VALUE;
        int result = 0;
        for (int i = 0; i < nums.length - 2; i++) {
            int left = i + 1;
            int right = nums.length - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                int dif = Math.abs(sum - target);
                if (dif == 0)
                    return target;
                if (sum > target) {
                    right--;
                }
                else {
                    left++;
                }
                if (dif < minDif) {
                    minDif = dif;
                    result = sum;
                }
            }
        }
        return result;
    }
}
原文地址:https://www.cnblogs.com/Victor-Han/p/5195302.html