Leetcode 1482题 制作 m 束花所需的最少天数
链接: 制作 m 束花所需的最少天数.
提交结果:
解题思路
本题主要采用二分查找的解题思路,范围为0到天数最大值,根据是否能组成相应数量的花缩小范围,因此需要添加一个判断函数。最终时间复杂度为O(nlogn).
本题和leetcode中爱吃香蕉的阿珂,分割数组最大值思路相同
代码
// An highlighted block
int judge(int* bloomDay, int bloomDaySize, int mid,int m,int k){
int cnt=0;
int target=0;
int rurrent=k;
for(int i=0;i<bloomDaySize;i++){
if(bloomDay[i]<=mid){
rurrent--;
if(rurrent==0){
target++;
rurrent=k;
}
}
else {
rurrent=k;
}
}
if(target>=m) return 1;
else return 0;
}
int minDays(int* bloomDay, int bloomDaySize, int m, int k){
if(bloomDaySize<m*k) return -1;
int max=0;
for(int i=0;i<bloomDaySize;i++){
if(bloomDay[i]>max) max=bloomDay[i];
}
int left=0;
int right=max;
while(left<right){
int mid=left+(right-left)/2;
if(judge(bloomDay,bloomDaySize,mid,m,k)){
right=mid;
}
else {
left=mid+1;
}
}
return left;
}