次のように内容は次のとおりです。
整数の配列を考える
nums
と、整数threshold
、我々は正の整数除数を選択し、それによって、すべての配列を分割し、除算の結果を合計します。結果は、上記に以下であるような最小の除数を探しますthreshold
。除算の各結果は、より最も近い整数に丸めより大きい又はその要素に等しいです。(例:7/3 = 3および10/2 = 5)。
答えがあることを保証されています。
例1:
入力:NUMS = [1,2,5,9]、閾値= 6 出力:5 説明:我々は、に和を得ることができる除数が1である場合、図17(1 + 2 + 5 + 9) 除数が4我々の場合7(1 + 1 + 2 + 3)に和を得ることができ、除数が5であれば合計が5(1 + 1 + 1 + 2)となります。例2:
入力:NUMS = [2,3,5,7,11]、閾値= 11 出力:3例3:
入力:NUMS = [19]、閾値= 5 出力:4制約:
1 <= nums.length <= 5 * 10^4
1 <= nums[i] <= 10^6
nums.length <= threshold <= 10^6
問題解決のアイデア:除数が、より大きな小さく、計算され、バイナリ検索を使用することが可能です。
コードは以下の通りであります:
クラス溶液(オブジェクト): DEF smallestDivisor(自己、NUMS、閾値): "" " :タイプNUMS:リスト[INT] :タイプしきい値:INT :RTYPE:INT """ RES = 0 ロー、ハイ = 1,1000000 一方低<= 高: 半ば =(低+高)/ 2 のカウント = 0 のための私でNUMS: 数 + =(I / ミッド) もし私%の半ば= 0:!数+ = 1 の場合、カウント<=しきい値: RES = ミッド ハイ =中旬- 1 他: 低 =ミッド+ 1つの 戻り RES