1. 程式人生 > >[LeetCode]16. 3Sum Closest最接近的三數之和

[LeetCode]16. 3Sum Closest最接近的三數之和

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

這題要求找出三個數的和跟target最接近的,可以跟之前的三數之和類似的方法來處理,同樣先確定一個數後再對剩下的兩個數使用雙指標法
每次根據結果與target的比較結果判斷移動頭指標還是尾指標,這裡注意結果大於target也可能小於target所以要做絕對值的判斷

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int closestNum = nums[0] + nums[1] + nums[2];
        for (int i = 0; i < nums.length - 2; i++) {
            int l = i + 1, r = nums.length - 1;
            while (l < r){
                
int threeSum = nums[l] + nums[r] + nums[i]; if (Math.abs(threeSum - target) < Math.abs(closestNum - target)) { closestNum = threeSum; } if (threeSum > target) { r--; } else if (threeSum < target) { l
++; } else { return target; } } } return closestNum; } }