最も近い3Sum
Q:
n個の整数の配列NUMSと整数ターゲット与え、合計がターゲットに最も近くなるようにNUMS三の整数を見つけます。三つの整数の合計を返します。あなたは、各入力は正確に一つの解決策を持っているであろうと仮定してもよいです。
例:
配列NUMS = [-1、2、1、-4]が与えられると、及び= 1のターゲット
目標に最も近い合計は2(-1 + 1 + 2 = 2)です。
例:
配列NUMS = [-1、2、1、-4]が与えられると、及び= 1のターゲット
目標に最も近い合計は2(-1 + 1 + 2 = 2)です。
:
/ * * * 3Sum最寄り *最接近的三数之和 * / / * * * @param {数[]} NUMS * @param {数}目標 * @return {数} * / 機能binarySearch(ターゲット) { VARの開始= 0 、終了 = a.length - 1 。 一方、(開始<= 端){ VARミッド= ~~((スタート+エンド)>> 1 )。 もし([中間]> = 目標) 端 =ミッド- 1 。 他の 開始 =ミッド+ 1を、 } 戻り始めます。 } VARthreeSumClosest = 関数(NUMS、ターゲット){ nums.sort(関数(B){ 返す - Bは; }); VaRの LEN = nums.length。 VAR ANS = 無限大。 ため(VAR i = 0; iがLEN <; iは++ ) ため(VARの J = I + 1、J <LEN; J ++ ){ VARの A =ターゲット- NUMS [I] - NUMS [J]。 VaRの POS = binarySearch(NUMS、A)。 用(VARの K = Math.max(0、POS - 1); K <= Math.min(POS + 0、LEN - 1); ++ kは){ もし(kは===私|| K === j)を 続けます。 VaRの和= NUMS [I] + NUMS [J] + NUMS [K]。 もし(Math.abs(和-ターゲット)<Math.abs(ANS - ターゲット)) ANS = 和。 } } 戻りANS。 }。