1482. Minimum Number of Days to Make m Bouquets
思路分析
代码实现
class Solution {
private boolean check(int mid,int[] bloomDay,int m,int k){
int n=bloomDay.length;
int[] curDay = new int[n];
for(int i=0;i<n;i++){
curDay[i]=bloomDay[i]<=mid?1:0;
}
int cnt=0;
for(int i=0;i<n;i++){
int j=i;
while(j<n && curDay[j]==1){
j++;
}
cnt+=(j-i)/k;
i=j;
}
return cnt>=m;
}
public int minDays(int[] bloomDay, int m, int k) {
if ((long) m * k > bloomDay.length) {
return -1;
}
int latest = 0;
for(int day:bloomDay){
latest=Math.max(day,latest);
}
int l=1,r=latest;
while(l<r){
int mid=l+r>>1;
if(check(mid,bloomDay,m,k)){
r=mid;
}else{
l=mid+1;
}
}
return r;
}
}
class Solution {
public int minDays(int[] bloomDay, int m, int k) {
if ((long) m * k > bloomDay.length) {
return -1;
}
int maxDay = 0;
int minDay = Integer.MAX_VALUE;
for (int day : bloomDay) {
maxDay = Math.max(maxDay, day);
minDay = Math.min(minDay, day);
}
int l = minDay, r = maxDay;
while (l < r) {
int mid = l + (r - l) / 2;
if (check(mid, bloomDay, m, k)) {
r = mid;
} else {
l = mid + 1;
}
}
return r;
}
private boolean check(int days, int[] bloomDay, int m, int k) {
int bouquets = 0;
int flowers = 0;
for (int bloom : bloomDay) {
if (bloom <= days) {
flowers++;
if (flowers == k) {
bouquets++;
flowers = 0;
}
} else {
flowers = 0;
}
}
return bouquets >= m;
}
}
同类题型
视频讲解
💬 评论