面试的过程中二分真的一直在被问, “思路很简单,细节是魔鬼”,二分真的很重视细节。而且有问题看似和二分无关,实际上是完全可以用二分进行加速的。这里对二分问题的进阶进行汇总。很重要,面试的过程中被问到了。 |
---|
LeetCode 875. 爱吃香蕉的珂珂
这道题在某大厂的三面中被问到了。
class Solution {
public int minEatingSpeed(int[] piles, int H) {
if(piles==null||piles.length==0){
return 0;
}
int max=0;//数组中元素的最大值,
for(int i=0;i<piles.length;i++){
max=Math.max(max,piles[i]);
}
int left=1;
int right=max;
//结果一定在left到right之间 用二分进行查找即可
while(left<right){
int mid = (left + right) >> 1;
if(help(piles,mid,H)){
//如果每个小时吃mid个无法完成的话那就要加大mid数量,即从右边找
left=mid+1;
}else{
//如果每个小时吃mid个可以完成的话那么我们就尝试更小的可能
right=mid;
}
}
return right;
}
//每小时吃掉k个H个小时是否能吃完
public boolean help(int[] piles,int k,int H){
int nums=0;
for