LCP 12. 小张刷题计划
难度:中等
题目描述
解题思路
每次做了一种类型在这里插入代码片
的题目我就喜欢再去找找类似的做法,一起性多刷几道
这个和数组划分、还有吃香蕉是一样的
也是在一个范围内二分,不一样的是计算天数的时候,能用场外求助
/*
* LCP 12. 小张刷题计划
* 2020/7/25 难度:中等
*/
public int minTime(int[] time, int m) {
//二分,最小的做题时间0,最大是做所有题目需要的时间
int left = 0,right = 0;
for (int i = 0; i < time.length; i++) {
right += time[i];
}
while(left < right) {
int mid = left + (right - left)/2;
int count = 1,sum = 0,max = 0;
// 贪心:每天的那次机会,不用白不用,所以每天肯定都要用一次求助,而且肯定用到开销最多的那道题
for (int i = 0; i < time.length; i++) {
max = Math.max(max, time[i]);
sum += time[i];
//如果已经减掉区间里的最大值,还是不满足条件的话,就把之前的数字划分开来
if(sum - max > mid) {
max = time[i];
sum = time[i];
count++;
}
}
if(count > m) { //如果做的太慢了
left = mid + 1;
}else {
right = mid;
}
}
return left;
}