1482. 制作 m 束花所需的最少天数 ( 二分扩展 )

LeetCode:1482. 制作 m 束花所需的最少天数

在这里插入图片描述

这道题 用 二分, 有点不好想

题目类似: LCP 12. 小张刷题计划 ( 二分扩展 )


与经典二分有点不同

问题是怎么去分


bloomDay 数组中,每个花开的时间是不一样的, 必须要到花开后才能作为材料做成一束花。


直接枚举天数作为 value, 然后查找数组中能够做成几束花 ( 即数组中在 value 及之前就开花的花有多少个 )



AC Code

class Solution {
    
    
    public int minDays(int[] b, int m, int k) {
    
    
        int len = b.length;
        if(len < m * k) return -1;
        // 找上限下限
        int left = 1, right = Arrays.stream(b).max().getAsInt();
        while(left <= right) {
    
    
            int mid = left + (right - left) / 2;

            if(check(b, m, k, mid)) {
    
    
                // 摘不够,需要更多的花
                left = mid + 1;
            } else {
    
    
                right = mid - 1;
            }
        }
        
        return left;
    }

    public boolean check(int[] b, int m, int k, int target) {
    
    
        int cnt = 0;
        int len = b.length;

        int tmp = 0;
        for(int i = 0; i < len; i++) {
    
    
            if(b[i] <= target) {
    
    
                // 已经开花
                tmp++;
                if(tmp >= k) {
    
    
                    // 够做一束花的材料了
                    tmp = 0;
                    cnt++;
                }
            } else {
    
    
                tmp = 0;
            }
        }

        return cnt < m;
    }

}



猜你喜欢

转载自blog.csdn.net/qq_43765535/article/details/112714593