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

本文涉及的基础知识点

C++二分查找

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
解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花还未开。
现在需要制作 3 束花,每束只需要 1 朵。
1 天后:[x, _, _, _, _] // 只能制作 1 束花
2 天后:[x, _, _, _, x] // 只能制作 2 束花
3 天后:[x, _, x, _, x] // 可以制作 3 束花,答案为 3
示例 2:

输入:bloomDay = [1,10,3,10,2], m = 3, k = 2
输出:-1
解释:要制作 3 束花,每束需要 2 朵花,也就是一共需要 6 朵花。而花园中只有 5 朵花,无法满足制作要求,返回 -1 。
示例 3:
输入:bloomDay = [7,7,7,7,12,7,7], m = 2, k = 3
输出:12
解释:要制作 2 束花,每束需要 3 朵。
花园在 7 天后和 12 天后的情况如下:
7 天后:[x, x, x, x, _, x, x]
可以用前 3 朵盛开的花制作第一束花。但不能使用后 3 朵盛开的花,因为它们不相邻。
12 天后:[x, x, x, x, x, x, x]
显然,我们可以用不同的方式制作两束花。
示例 4:
输入:bloomDay = [1000000000,1000000000], m = 1, k = 1
输出:1000000000
解释:需要等 1000000000 天才能采到花来制作花束
示例 5:
输入:bloomDay = [1,10,2,9,3,8,4,7,5,6], m = 4, k = 2
输出:9
提示:
bloomDay.length == n
1 <= n <= 10^5
1 <= bloomDay[i] <= 10^9
1 <= m <= 10^6
1 <= k <= n

C++二分查找

二分类型:寻找首端。
Check函数的参数范围:[1,p] p =max(bllomDay)
Check函数:
一,记录连续花的长度x。可制成y=x/k束花。
二,return ∑ \sum (y) >= m。

代码

核心代码

template<class INDEX_TYPE>
class CBinarySearch
{
public:CBinarySearch(INDEX_TYPE iMinIndex, INDEX_TYPE iMaxIndex):m_iMin(iMinIndex),m_iMax(iMaxIndex) {}template<class _Pr>INDEX_TYPE FindFrist( _Pr pr){auto left = m_iMin - 1;auto rightInclue = m_iMax;while (rightInclue - left > 1){const auto mid = left + (rightInclue - left) / 2;if (pr(mid)){rightInclue = mid;}else{left = mid;}}return rightInclue;}template<class _Pr>INDEX_TYPE FindEnd( _Pr pr){int leftInclude = m_iMin;int right = m_iMax + 1;while (right - leftInclude > 1){const auto mid = leftInclude + (right - leftInclude) / 2;if (pr(mid)){leftInclude = mid;}else{right = mid;}}return leftInclude;}
protected:const INDEX_TYPE m_iMin, m_iMax;
};class Solution {public:int minDays(vector<int>& bloomDay, int m, int k) {auto Check = [&](int mid) {int cnt2 = 0;int cnt1 = 0;for (const auto& n : bloomDay) {if (n <= mid) {cnt1++;}else {cnt2 += cnt1 / k;cnt1 = 0;}}cnt2 += cnt1 / k;return cnt2 >= m;};int ret =  CBinarySearch<int>(1, 1'000'000'000).FindFrist(Check);return Check(ret) ? ret : -1;}};

单元测试

vector<int> bloomDay;int m,k;TEST_METHOD(TestMethod11){bloomDay = { 1, 10, 3, 10, 2 }, m = 3, k = 1;auto res = Solution().minDays(bloomDay, m, k);AssertEx(3,res);}TEST_METHOD(TestMethod12){bloomDay = { 1,10,3,10,2 }, m = 3, k = 2;auto res = Solution().minDays(bloomDay, m, k);AssertEx(-1, res);}TEST_METHOD(TestMethod13){bloomDay = { 7,7,7,7,12,7,7 }, m = 2, k = 3;auto res = Solution().minDays(bloomDay, m, k);AssertEx(12, res);}TEST_METHOD(TestMethod14){bloomDay = { 1000000000,1000000000 }, m = 1, k = 1;auto res = Solution().minDays(bloomDay, m, k);AssertEx(1000000000, res);}TEST_METHOD(TestMethod15){bloomDay = { 1,10,2,9,3,8,4,7,5,6 }, m = 4, k =2;auto res = Solution().minDays(bloomDay, m, k);AssertEx(9, res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南京网站设计手机用的网站

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;越来越多的用户通过手机浏览网页&#xff0c;这使得网站设计逐渐向移动端倾斜。在南京&#xff0c;网站设计特别注重适配手机端&#xff0c;这不仅是用户体验的提升&#xff0c;也是市场竞争的需要。一个响应式的网站能…

vue3 v-bind=“$attrs“ 的一些理解,透传 Attributes相关说明及事例说明

1、可能小伙伴们经常会在自己的项目中看到v-bind"$attrs"&#xff0c;这个一般是在自定义组件中看到。 比如&#xff1a; <template><BasicModalv-bind"$attrs"register"registerModal":title"getTitle"ok"handleSubm…

前端框架有哪些 如何选择和优缺点

前端框架是用于构建用户界面的工具和库&#xff0c;它们提供了一套预定义的组件、样式和交互模式&#xff0c;帮助开发者更高效地开发前端应用。目前市面上存在多种前端框架&#xff0c;每种框架都有其独特的优势和缺点。以下是一些常见的前端框架及其优势和缺点的概述&#xf…

Python进程间网络远程通讯方式:socket、pipe、RPC详解!

背景 最近在进行开发工作的时候&#xff0c;遇到了一个场景&#xff1a; pc程序需要和安卓设备进行通讯和接口调用。 此时就需要进行远程调用方法。然而大学时代有关于远程过程调用的知识都还给了老师……所以在此进行一个复习&#xff0c;并进行实战演练&#xff01; 网络…

Java八股文总结四

集合类 一、什么是集合以及使用的好处&#xff1f;Java有哪些常见的集合类&#xff1f; 集合概念 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用的容器 集合类存放的都是对象的引用&#xff0c;而不是对象的本身 集合类型主要有3种&#xff1a;set(集&…

Java语言程序设计基础篇_编程练习题*18.8 (以逆序输出一个整数中的数字)

目录 *18.8 (以逆序输出一个整数中的數字) 代码示例 输出结果 *18.8 (以逆序输出一个整数中的數字) 编写一个递归方法&#xff0c;使用下面的方法头在控制台上以逆序显示一个 int 型的值: public static void reverseDisplay(int value) 例如&#xff0c;reverseDisplay(1…

HTTP状态码304

304状态码的那些事 前言定义产生的原因304状态码出现过多会造成的问题状态码3XX&#xff08;重定向&#xff09; 前言 往往在我们开发中&#xff0c;有时候会遇到304状态码&#xff0c;很多的时候我们把他当作一个错误处理&#xff0c;那现在来聊聊这个304是怎么个事 定义 3…

【网络安全】URL解析器混淆绕过CSP实现XSS

未经许可,不得转载。 文章目录 前言正文前言 许多流行的静态网站生成器都存在图像 CDN 功能,它们通过优化网站中的图像来加快页面加载速度。例如: 1、Optimizing Images | Next.js 利用内置的 next/image 组件优化图像(nextjs.org) 2、Nuxt Image: Nuxt 应用的图像优化…

UE驻网失败问题(三)

这个问题是lab问题&#xff0c;现象如下&#xff1a; 期望UE注册在SA网络下&#xff0c;咋一看没有5G MIB/SIB1打印&#xff0c;好像是没搜到5G小区&#xff0c;而实际上并不是这样。 在查看搜网过程时会发现如下log打印&#xff1a; [I nr5g_rrc_acq.c 3544] RRC ACQ: Band 41…

一个全面、先进、公平且模块化的开源RAG框架

两个关键问题限制了 RAG 的发展&#xff1a; 新型 RAG 算法之间缺乏全面和公平的比较。 像 LlamaIndex 和 LangChain 这样的开源工具使用了高级抽象&#xff0c;这导致了透明度的缺失&#xff0c;并限制了开****发新算法和评估指标的能力。 RAGLAB&#xff1a;是一个模块化的…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境,而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误,提示需要一个可用的套件。 解决办法: 点击+号创建新的套件…

OpenAI官宣ChatGPT用户破2亿,新模型比GPT-4强100倍!

在刚刚召开的“KDDI SUMMIT 2024”大会上&#xff0c;OpenAI日本首席执行官長崎忠雄表示&#xff0c;截止至今年8月底&#xff0c;ChatGPT的月活用户数量突破2亿大关&#xff0c;成为史上最快达到这一成就的软件产品。 同时&#xff0c;ChatGPT企业级用户也获得大幅度增长达到…

Windows自动化程序开发指南

自动化程序的概念 “自动化程序”指的是通过电脑编程来代替人类手工操作的一类程序或软件。这类程序具有智能性高、应用范围广的优点&#xff0c;但是自动化程序的开发难度大、所用技术杂。 本文对自动化程序开发的各个方面进行讲解。 常见的处理对象 自动化程序要处理的对…

STM32关于keil使用过程中遇到的问题

1.设备管理器STlink驱动确认安装完成&#xff0c;但是keil里一直识别不到&#xff0c;换下载器也没用 &#xff08;1&#xff09;问题描述 我的问题是这样产生的&#xff1a;之前用标准库开发STM32的时候&#xff0c;STLink能够正常使用&#xff0c;然后使用HAL库开发的时候出…

C++ 生产者-消费者模式详细解析与代码实现

在多线程编程中&#xff0c;生产者-消费者&#xff08;Producer-Consumer&#xff09;模式是一种经典的并发模型。它能够解决多线程环境下资源共享和任务调度的问题。本篇博客将从生产者-消费者模式的概念、实现方式、典型场景、以及具体的C代码示例展开详细讲解。 一、生产者…

声音克隆工具CosyVoice

阿里的免费声音克隆工具CosyVoice CosyVoice 是阿里通义实验室在七月初开源的一款专注于自然语音合成的语音大模型&#xff0c;它具备多语言、多音色和细腻的情感控制能力。这个系统支持中文、英文、日文、粤语和韩语五种语言的语音生成&#xff0c;并且在语音合成的效果上远超…

WebShell流量特征检测_哥斯拉篇

90后用菜刀&#xff0c;95后用蚁剑&#xff0c;00后用冰蝎和哥斯拉&#xff0c;以phpshell连接为例&#xff0c;本文主要是对后三款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马&#xff1f; 1、定义 顾名思义就是执行恶意指令的木马&#xff0c;通过技术手…

以编程方式运行仿真

可以通过两种方法以编程方式仿真模型&#xff1a; 通过 sim 命令。 通过运行按钮 使用 sim 命令执行仿真时&#xff0c;可以使用命令行对仿真执行操作。使用运行按钮执行仿真意味着您可以使用 Simulink UI 与仿真进行交互&#xff0c;以执行任何其他操作。下表详细说明了这两…

STM32G474之DAC

STM32G474分别使用CORDIC硬件和“math.h”的正弦值&#xff0c;从DAC1和DAC2输出。 1、DAC特点 PA4的附加功能为DAC1_OUT1&#xff0c;无需映射&#xff0c;直接将它配置为模拟功能&#xff0c;就可以使用了。 PA6的附加功能为DAC2_OUT1&#xff0c;无需映射&#xff0c;直接将…

使用PyTorch Lightning力量精简空间分析

大家好&#xff0c;随着人工智能热潮的全面兴起&#xff0c;PyTorch Lightning库正在获得越来越多的关注。其特别突出的地方在于简化复杂的机器学习操作&#xff0c;即使对于非开发者也是如此。深度学习和部分机器学习中的许多挑战性方面&#xff0c;如多GPU训练和实验跟踪&…