题目意思是说给出 n 段木材L[i], 将这 n 段木材切分为至少 k 段,这 k 段等长,求能从 n 段原材料中获得的最长单段木材长度。以 k=7 为例,要将 L 中的原材料分为7段,能得到的最大单段长度为114, 232/114 = 2, 124/114 = 1, 456/114 = 4, 2 + 1 + 4 = 7.

public int woodCut(int[] L, int k) {
        int left =  0;
        int right = Integer.MAX_VALUE;
        while(left+1<right){
            int mid = left + (right-left)/2;
            if(count(L,k,mid)){
                left = mid;
            }
            else{
                right = mid;
            }
        }return left;
    }
    public boolean count(int[] L, int k, int x){
        int sum = 0;
        for(int l : L){
            sum = sum + l/x;
        }
        return sum>=k;
    }

results matching ""

    No results matching ""