2021.3.23
875. 爱吃香蕉的珂珂
class Solution {
public int minEatingSpeed ( int [ ] piles, int h) {
int left = 1 , right = Arrays. stream ( piles) . max ( ) . getAsInt ( ) + 1 ;
while ( left < right) {
int mid = left + ( right - left) / 2 ;
if ( canFinish ( piles, mid, h) ) {
right = mid;
} else {
left = mid + 1 ;
}
}
return left;
}
boolean canFinish ( int [ ] piles, int speed, int H) {
int time = 0 ;
for ( int pile : piles) {
time += timeOf ( pile, speed) ;
}
return time <= H;
}
int timeOf ( int n, int speed) {
return ( n / speed) + ( ( n % speed > 0 ) ? 1 : 0 ) ;
}
}
1011. 在 D 天内送达包裹的能力
class Solution {
public int shipWithinDays ( int [ ] weights, int D) {
int left = Arrays. stream ( weights) . max ( ) . getAsInt ( ) ;
int right = Arrays. stream ( weights) . sum ( ) + 1 ;
while ( left < right) {
int mid = left + ( right - left) / 2 ;
if ( canFinish ( weights, D, mid) ) {
right = mid;
} else {
left = mid + 1 ;
}
}
return left;
}
boolean canFinish ( int [ ] w, int D, int cap) {
int i = 0 ;
for ( int day = 0 ; day < D; day++ ) {
int maxCap = cap;
while ( ( maxCap -= w[ i] ) >= 0 ) {
i++ ;
if ( i == w. length) {
return true ;
}
}
}
return false ;
}
}