183. Wood Cut


做题历程:

  1. 第一次做,本次没有解出结果

其实本次不能算完全没有解出,毕竟,已经解出了9成,就是Binary Search的部分,完全没有问题。。

问题出在startend的判断上,我的start = 1是正确的,但是end搞错了,end应该是所有元素中最大的,因为我们不可能搞出比这个还大的Wood Cut

代码如下:

class Solution {
public:
    /** 
     *@param L: Given n pieces of wood with length L[i]
     *@param k: An integer
     *return: The maximum length of the small pieces.
     */
    int woodCut(vector<int> L, int k) {
        // write your code here
        int start = 1;
        int end = 0;
        for (int i = 0; i < L.size(); ++i) {
            end = max(end, L[i]);
        }

        while (start + 1 < end) {
            int middle = start + (end - start) / 2;
            int piece = calculate(L, middle);
            if (piece < k) {
                end = middle - 1;
            }
            else if (piece == k) {
                start = middle;
            }
            else {
                start = middle;
            }
        }

        if (calculate(L, end) >= k) {
            return end;
        }
        if (calculate(L, start) >= k) {
            return start;
        }
        return 0;
    }

private:
    int calculate(const vector<int>& L, int sz) {
        int res = 0;
        for (int i = 0; i < L.size(); ++i) {
            res += L[i] / sz;
        }
        return res;
    }
};

results matching ""

    No results matching ""