1891 cutting ribbons
https://leetcode.com/problems/cutting-ribbons/
class Solution {
public int maxLength(int[] ribbons, int k) {
int lo = 0;
int hi = 0;
for (int ribbon : ribbons) {
hi = Math.max(ribbon, hi);
}
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
if (canCut(ribbons, mid, k)) {
lo = mid;
} else {
hi = mid;
}
}
if (canCut(ribbons, hi, k)) {
return hi;
}
return lo;
}
private boolean canCut(int[] nums, int len, int k) {
if (len == 0) {
return true;
}
int cnt = 0;
for (int num : nums) {
cnt += num / len;
}
return cnt >= k;
}
}
binary search还蛮适合做这种求极值或者某个精确解的问题的,注意就是判断的部分可能很costly,这是正常的
Last updated