【leetcode】1300。ターゲットに最も近い変異配列の合計

次のように内容は次のとおりです。

整数配列を指定  arr し、目標値  target、整数を返す  value 、我々はより大きいすべての整数に変更するとき、そのようなこと  value に等しくなるように指定された配列では  value、アレイの合計が(絶対差で)できるだけ近くなるが  target

同点の場合には、最小のそのような整数を返します。

答えはneccesarillyから数ではないことに注意してください  arr

例1:

入力:ARR = [4,9,3]、目標= 10 
出力:3 
9を合計し、その最適な答えだと3つのARRの変換を用いて、[3、3、3]:説明。

例2:

入力:ARR = [2,3,5]、目標= 10 
出力:5

例3:

入力:ARR = [60864,25176,27249,21296,20204]、ターゲット= 56803 
出力:11361

制約:

  • 1 <= arr.length <= 10^4
  • 1 <= arr[i], target <= 10^5

問題解決のアイデア:まず編曲ソート。配列はすべて置き換え値の値の数よりも大きいはずである場合は、二分探索法による編曲に登場する値の位置を見つけることができ、要素の左半分は、要素の右半分の直接の合計を変更する必要はありません長さ*値について。

コードは以下の通りであります:

クラスのソリューション(オブジェクト):
     デフfindBestValue(自己、編曲、ターゲット):
         "" " タイプ編曲:リスト[INT] 型ターゲット:INT 
        :RTYPE:int型
        """ 
        インポート二分
        差分 =フロート(' INF ' 
        RES = 0 
        arr.sort()
        ヴァル = [] 
        のカウント = 0
         のための I ARR:
            カウント + = I 
            val.append(カウント)
        するための V 範囲(0、ARR [-1] + 1 ):
            INX = bisect.bisect_right(ARR、v)の = V *(LEN(ARR) - INX)
             であれば INX> 0:量+ =ヴァル[INX-1 ]
             であればデフ> ABS(量- ターゲット):
                差分 = ABS(量- ターゲット)
                RES = Vの
         リターン RES

 

おすすめ

転載: www.cnblogs.com/seyjs/p/12114155.html