LeetCode16。3Sum最も近い代わりの3及び数

16.3Sum目標値と3の数に最も近い最も近いです

最も近い3Sum

アレイ所与numsn個の整数と整数target、三の整数を見つけるnums合計が最も近くなるようにtarget三つの整数の合計を返します。あなたは、各入力は正確に一つの解決策を持っているであろうと仮定してもよいです。

例:

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

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
そして3人は数に基づいて変更しました

問題解決のためのアイデアやLeetCode15 3Sum 3つのデジタルサム処理したときに、ちょうど異なる同じです。また、同様に、二重ポインタに採用します。各時間は、ポインタが移動し、次の最も近いターゲットのレコードを比較し、最も近い前の値と距離の大きさの目標値との距離の現在値を比較しなければなりません。

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int numsLen = nums.length;
        int result = nums[0] + nums[1] + nums[2];
        for(int i = 0 ; i < numsLen - 2; i++){
            if(i > 0 && nums[i] == nums[i-1]){
                continue;
            }            
            int left = i+ 1;
            int right = nums.length -1;
            while(left < right){
                int sum = nums[i] + nums[left] + nums[right];
                if(sum < target){
                    if(Math.abs(target - sum) < Math.abs(target - result)){
                        result = sum;
                    }
                    left++;
                 while(left < right && nums[left] == nums[left - 1]){
                    left++;
                }
                } else if(sum > target){
                    if(Math.abs(target - sum) < Math.abs(target - result)){
                        result = sum;
                    }
                    right--;
                while(left < right && nums[right] == nums[right + 1]){
                    right--;
                }
                } else {
                    return target;
                }
            }
        }
        return result;
    }
}
公開された36元の記事 ウォンの賞賛8 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_32763643/article/details/104254326