タイトル説明。
n個の整数と目標NUMSターゲットを含むアレイを考えます。NUMSは三つの整数を特定し、そのような彼らの最も近いことをターゲットにしています。3つの数字とリターン。各グループは唯一の答えのみ入力があることを前提としています。
例えば、配列NUMS = [-1,2,1、-4]、およびターゲット= 1が与えられます。
最も近いターゲットは、三及び番号2(-1 = 1 + 2 + 2)です。
問題解決:
クラスソリューション: DEF threeSumClosest(セルフ、NUMS、ターゲット): #空の配列または長さが3つの未満戻り空である IF ません NUMS または lenの(NUMS)<3 : リターンなし #第一ソート nums.sort() #は、解像度を示し無限 RES =フロート(「INF 」) #アレイを通して左から右に するための I にレンジ(LEN(NUMS)): #重複値については、一度だけ計算する必要が IF I> 0 と NUMS [I] == NUMS [-I 1。]: 続行 #左ポインタ L = I + 1 #右ポインタ R = LEN(NUMS) - 1 #コアは、左および右ポインタ値ポインタのうち増加する値である #は、このような、3つのターゲットの近くに数 ながら L < R&LT: #1 レコード3の現在の数と CUR = NUMS [I] + NUMS [ L] + NUMS [R&LT] #場合は、直接バック3つの目標数に等しい見出さ IF CUR == ターゲット: リターン・ターゲットを IF ABS(RES-ターゲット)> ABS(CURの目標): #最初の時間が決定されますこの時点では、無限解像度であるため、常に真 のres = CUR IF:CUR>ターゲット#現在の値が大きすぎると、左右の手 R - = 1 他:#は、現在の値は、左ポインタ右小さすぎます L + 1 = リターン RES
これは重要なステップは、最初にすべてのlet解像度の、ある初期値は、無限であるかを決定することです。
結果: