1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int maxLength(int[] ribbons, int k) {
int left = 1, right = (int) 1e5, ans = 0;
while (left <= right) {
int mid = left + (right - left) / 2;
if (isCuttable(ribbons, mid, k)) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}

private boolean isCuttable(int[] ribbons, int length, int k) {
int count = 0;
for (int ribbon : ribbons) {
count += ribbon / length;
}
return count >= k;
}
}

跟我想的一样. binary search. 我们需要一个method来判断当前的length是否能够取到, 取到的话记录一下然后往右走, 取不到就往左走.

时间复杂度: O(nlog(max(ribbons)))
空间复杂度: O(1)