説明
長さと所定のN木材片 L[i]
(整数アレイ)。あなたは同じ長さと同等か、k個以上持っている可能性を保証するために小片にそれらをカット。あなたは木のn個から得ることができる最長の長さとは何ですか?L&K与えられ、小片の最大の長さを返します。
あなたはフロート長さに木を切ることができませんでした。
あなたが得ることができなかった場合は> = k個の 駒、リターン 0
。
例
例1
Input:
L = [232, 124, 456]
k = 7
Output: 114
Explanation: We can cut it into 7 pieces if any piece is 114cm long, however we can't cut it into 7 pieces if any piece is 115cm long.
例2
Input:
L = [1, 2, 3]
k = 7
Output: 0
Explanation: It is obvious we can't make it.
チャレンジ
O(Nレンログ)、lenが木材の最も長い長さです。
アイデア:二分法の回答方法、の二点までの量に、行うことができる場合には、増加され、そうでない場合は、軽減されます。
パブリッククラスソリューション{ / ** * @paramのL:与えられたn個の長さLを有する木材の小片[I] * @paramのK:整数 *リターン:小片の最大長。 * / パブリックINT木版(INT [] L、INT K){ int型のL = 1、RES = 0。 INT R = 0。 (INT項目:L)のために{ R = Math.max(R、項目)。 } 一方、(L <= R){ int型のミッド= L +(R - L)/ 2。//(L + R)/ 2がオーバーフローする 場合(カウント(L、MID)> = K){ RES =ミッド。 L =ミッド+ 1。 }他{ R =ミッド- 1。 } } RESを返します。 } プライベートINTカウント(INT [] L、INT LEN){ int型の和= 0。 (INT項目:L)のために{ 和+ =項目/ lenは、 } の和を返します。 } }