Two sum closet

這題可以用 two pointer 做,不難,但考點在於他是要求「絕對值」,所以要用 Math.abs 去算

首先先 sort,然後用 two pointer 從兩旁開始,每次都去計算 Math.abs(target-sum)

如果比之前都小則記錄起來用在下個回圈做比較,

最後返回 min

迴圈地方要注意如果是用 left+1 != right 要記得最最後確認

public int twoSumClosest(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
        return 0;
    }

    Arrays.sort(nums);
    int n = nums.length;
    int left = 0, right = n-1, sum = 0;
    int min = Integer.MAX_VALUE;
    while (left+1 != right) {
        sum = nums[left] + nums[right];
        if (Math.abs(target - sum) < min) {
            min = Math.abs(target - sum);
        }
        if (sum == target) {
            return 0;
        } else if (sum > target) {
            right--;
        } else {
            left++;
        }
    }
    if (min < Math.abs(target-nums[left]-nums[right]))
        return min;
    return Math.abs(target-nums[left]-nums[right]);
}

results matching ""

    No results matching ""