Leetcode_1482.制作m束花所需的最少天数

【LeetCode】第1482题——制作 m 束花所需的最少天数(难度:中等) 【LeetCode】第1482题——制作 m 束花所需的最少天数(难度:中等)题目描述解题思路代码详解注意点 题目描述 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10 阅读详情

给你一个整数数组 bloomDay,以及两个整数 m 和 k 。
现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。
花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。
请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。

原题地址:制作m束花所需的最少天数

  • 我的错误题解:
/*
 * 来思路了来思路了我的宝贝!!
 * 我由于 m * k 是所有需要的数量,这里我可以求“补集”
 * 即躲避除了 m * k 个数字外的数字都要是“倒数第几大的数字”
 * 即“bloomDay.size() - m * k”,这些倒数的全部给置为负数
 * 最后再在正数中排序,找到最大值,即为答案。
 * 我的思路错了,因为没有考虑并列的情况,可以暴力求解的。可是暴力毕竟是暴力。
 * 看一看大神的二分法和如何判断能不能进行切割吧!
 * */
/*----------------------------------------------------------------------------------------------------------------*/
int minDays(vector<int>& bloomDay, int m, int k) {
    int findmax = 0;
    vector<int>ghost = bloomDay;

    if ( (m * k) > bloomDay.size() ){//排除情况
        return -1;
    } else{
        int remain = bloomDay.size() - m * k;
        sort(ghost.begin(),ghost.end());
        /*对影子容器内元素从大到小排序,因为要叁束连着的,不能排序了*/
        for (int i = 0; i < remain; ++i) {
            for (int j = 0; j < bloomDay.size(); ++j) {
                if (bloomDay[j] == ghost[ghost.size()-1-i]){
                    bloomDay[j] = -1;
                }
            }
        }
        for (int i = 0; i < bloomDay.size(); ++i) {
            if (bloomDay[i] > 0 && findmax < bloomDay[i]){
                findmax = bloomDay[i];
            }
        }
    }
    return findmax;
}
/*----------------------------------------------------------------------------------------------------------------*/
  • 二分标准题解
/*----------------------------------------------------------------------------------------------------------------*/
class Solution {//官方二分题解,体会解题过程
public:
    int minDays(vector<int>& bloomDay, int m, int k) {
        if (m > bloomDay.size() / k) {
            return -1;
        }//去除特殊情况
        int low = INT_MAX, high = 0;
        int length = bloomDay.size();
        for (int i = 0; i < length; i++) {
            low = min(low, bloomDay[i]);
            high = max(high, bloomDay[i]);
        }//得到二分前置最大最小值,即初始化双指针
        while (low < high) {//左闭右开
            int days = (high - low) / 2 + low;         //days和mid有那味道了
            if (canMake(bloomDay, days, m, k)) {       //即可以进行分块
                high = days;   //右指针换位
            } else {
                low = days + 1;//左指针右移
            }
        }//经典二分,感觉好想滑动窗口,不过右界伴随着瞬变
        return low;
    }

    bool canMake(vector<int>& bloomDay, int days, int m, int k) {
        int bouquets = 0;
        int flowers = 0;
        int length = bloomDay.size();
        for (int i = 0; i < length && bouquets < m; i++) {
            if (bloomDay[i] <= days) {//只有当开花的日期在days范围内才能开花,否则初始
                flowers++;
                if (flowers == k) {//够一个花束
                    bouquets++;    //已有花束数量自增
                    flowers = 0;   //当前花束的花数初始化
                }
            } else {
                flowers = 0;//days不够花旗,初始化
            }
        }
        return bouquets >= m;//只有拥有花束 >= 目标花束才能true
    }
};

//作者:LeetCode-Solution
/*----------------------------------------------------------------------------------------------------------------*/

二分法,永远的神,简单的数据结构都给爷儿二分!
二分的爷儿,就是爷儿!

IC芯片验证 - 手把手教你搭建UVM验证环境 这是一个UVM的demo项目 阅读详情

相关推荐

关于发那科机器人抓手及物料搬运阀配置

4:确保抓手阀岛和输入模块配网连接正常,MENU—SETUP—MH Valves—Details,详细界面进入到左上图所示,根据每组阀分配夹钳数量并应用。3:设置搬运有效,抓手是否带点焊可以自行选择,要设置应用选择,物料搬用工具数量,工具上阀岛的数量,夹钳存在数量,工具存在数量,以及真空吸盘,冷启动。​2:MENU—应用选择,将搬运置为有效,剩余其他项根据机器人实际用途进行选择。5:设置夹钳数量,检查打开夹钳,检查闭合夹钳,延迟时间要给选择配置应用。

dxs93的博客 4772

leetcode:求减到0的最少次数

You are given an interger array nums and an integer x.In one operation,you can either remove the leftmost or the rightmost element from the array nums and subtract its value from x.Note that this modifies the array for tuture operations. Return the mini.

Jiangtagong的博客 482

微纳加工技术中的自对准硅化物(Silicide)工艺:关键步骤与应用场景解析

本文深入解析了微纳加工技术中的自对准硅化物(Silicide)工艺,详细介绍了其关键步骤与应用场景。从表面清洁、金属沉积到两步退火法,全面拆解工艺全流程,并探讨了不同技术节点下的工艺演进。文章还提供了实际应用中的问题排查方法和新兴技术对Silicide工艺的挑战,为芯片制造领域的工程师提供了实用参考。

weixin_30613727的博客 429

leetcode1482. 制作 m 束花所需的最少天数-medium

输入:bloomDay = [1,10,2,9,3,8,4,7,5,6], m = 4, k = 2。输入:bloomDay = [7,7,7,7,12,7,7], m = 2, k = 3。输入:bloomDay = [1,10,3,10,2], m = 3, k = 1。输入:bloomDay = [1,10,3,10,2], m = 3, k = 2。12 天后:[x, x, x, x, x, x, x]7 天后:[x, x, x, x, _, x, x]解释:要制作 2 束花,每束需要 3 朵。

weixin_37253733的博客 720

基于LabVIEW控制仪器检测与监控 --普源示波器DS1102Z-E

LabVIEW 控制普源示波器 代码实现与解释

s0101100的博客 4229

警惕AI依赖:如何避免数字水蛭侵蚀你的认知能力

在人工智能技术日益普及的今天,人机协作已成为现代工作流的核心范式。其原理在于通过算法模型辅助人类完成信息处理、内容生成等任务,从而提升效率。然而,过度依赖AI可能导致认知卸载,引发思考能力退化等潜在风险。从技术价值看,AI的核心在于增强而非替代人类智能,关键在于建立健康的协作模式。在应用场景上,无论是编程开发、内容创作还是决策分析,用户都需警惕工具依赖对深度工作、创造性思维和决策责任的侵蚀。本文聚焦于识别AI依赖的早期信号,并提供构建分阶段使用流程、将AI作为质疑者等具体策略,旨在帮助读者守护核心认知能力,

weixin_30240349的博客 624

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

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

Danny 1180

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

LeetCode 1482. 制作 m 束花所需的最少天数——呱呱的每日一题

leetcode 1482. 制作 m 束花所需的最少天数一、题目题目链接题面数据范围样例二、思路看数据猜算法算法实现思路三、代码 一、题目 题目链接 1482. 制作 m 束花所需的最少天数. 题面 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束

concyclics的博客 3万+

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 480

嵌入式工程师必学(52):储能系统ESS

能量存储系统(ESS,Energystoragesystems)存在于各种各样的尺寸、形状和技术中。储能系统的技术,即基本的储能机制,自然会影响其重要特性,包括成本、安全性、性能、可靠性和寿命。然而,尽管基础技术很重要,但一个成功的储能项目依赖于对该技术的彻底和深思熟虑的实施,以实现项目的目标。成功的实施取决于储能系统的架构和组装情况。系统的体系结构可以决定其性能和可靠性,与它所使用的技术一致,甚至与之无关。

码农17年的博客 1442

【LeetCode每日一题】1482. 制作 m 束花所需的最少天数

【LeetCode每日一题】1482. 制作 m 束花所需的最少天数今日相关题目1482.制作 m 束花所需的最少天数1011.在 D 天内送达包裹的能力1482. 制作 m 束花所需的最...

Francis的博客 318

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】

qq_45776114的博客 3534

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

原题 1482.制作m束花所需的最少天数 题解 判断某一天的时候是否能够完成花束的采摘很容易,主要就是能否快速找到符合要求的最小的那一天。 方法一 我们可以把开花的天数都存起来,行程一个数组(无重复),并排序。从头开始判断每一天是否可以完成花束收集,返回第一个符合要求的天数。 遗憾的是,本思路超时。 代码示例: class Solution { public int minDays(int[] bloomDay, int m, int k) { List<Integer&gt

zhuruihe2014的博客 307

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode1482. 制作 m 束花所需的最少天数(Python3)

leetcode1482. 制作 m 束花所需的最少天数 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察

weixin_43422466的博客 357

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

力扣 1482. 制作 m 束花所需的最少天数

给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花还未开。 现

yangzijiangtou 220

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

leetcode 1482. 制作 m 束花所需的最少天数。

qq_62172019的博客 375

Leetcode 1482 制作 m 束花所需的最少天数

题目链接 题目链接 给你一个整数数组 bloomDaybloomDaybloomDay,以及两个整数 mmm 和 kkk 。 现需要制作 mmm 束花。制作花束时,需要使用花园中 相邻的 kkk 朵花 花园中有 nnn 朵花,第 iii 朵花会在 bloomDay[i]bloomDay[i]bloomDay[i] 时盛开,恰好可以用于 一束花中。 请你返回从花园中摘 mmm 束花需要等待的最少的天数。如果不能摘到 mmm 束花则返回 -1 。 示例 1 输入:bloomDay = [1,10,3,10,2]

249

LeetCode 1482. 制作 m 束花所需的最少天数(二分查找)

1. 题目 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花

Michael是个半路程序员 1599

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

目录题目解题思路Code运行结果 题目 1482. 制作 m 束花所需的最少天数 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:

Kinght_123的博客 510

Leetcode 1482. 制作m束花所需的最少天数【二分法】

文章目录问题描述解题报告实现代码参考资料 问题描述 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天

MD 289

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

题目描述 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花还

uhlgjd的博客 296

【二分查找】leetcode 1482. 制作 m 束花所需的最少天数

使用二分查找来计算制作 m 束花所需的最少天数。

lele_ne的博客 231

我用java刷 leetcode 1482. 制作 m 束花所需的最少天数

这里有leetcode题集分类整理!!! 题目难度:中等 题目描述: 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让

e935052319的博客 208
上一篇: Leetcode_1720. 解码异或后的数组
下一篇: Leetcode_1482.制作m束花所需的最少天数————————晚上睡觉都会想的二分题
Neepu_G.job
博客等级 码龄8年 7粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值