木材カット

説明

長さと所定の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は、
        } 
        の和を返します。
    } 
}

  

 

おすすめ

転載: www.cnblogs.com/FLAGyuri/p/12078123.html