Skip to content

Latest commit

 

History

History
46 lines (36 loc) · 1.1 KB

1231.md

File metadata and controls

46 lines (36 loc) · 1.1 KB

Solution 1

通过二分对可能的结果集进行搜索, 需要确定结果集的上界和下届.

class Solution {
    public int maximizeSweetness(int[] sweetness, int k) {
        int minResult = sweetness[0], maxResult = 0;

        for (int item : sweetness) {
            minResult = Math.min(minResult, item);
            maxResult = maxResult + item;
        }

        while (minResult < maxResult) {
            int target = (minResult + maxResult + 1) / 2;
            if (canGetSweetness(sweetness, k, target)) {
                minResult = target;
            } else {
                maxResult = target - 1;
            }
        }

        return minResult;
    }

    private boolean canGetSweetness(int[] sweetness, int k, int target) {
        int sum = 0;
        int count = 0;

        // 切分是连续的.
        for (int item : sweetness) {
            sum += item;
            if (sum >= target) {
                sum = 0;
                count++;
            }
        }

        return count >= k + 1;
    }
}