Leetcode_1482.制作m束花所需的最少天数————————晚上睡觉都会想的二分题

ESP32-S3 SPI接口实战:从引脚分配到高速通信配置 本文详细解析了ESP32-S3的SPI接口配置与高速通信优化技巧,从引脚分配到软件配置,再到DMA传输和时钟优化,帮助开发者快速掌握SPI通信技术。特别针对ESP32-S3的SPI2接口进行了实战演示,包括硬件连接和常见问题排查,适用于各类嵌入式开发项目。 阅读详情

给你一个整数数组 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;
}
/*----------------------------------------------------------------------------------------------------------------*/

真是羞耻啊,写个代码戏还那么多,最后结果是gg了,尽力了老铁,我真的不太会灵活运用二分。
尤其是值的选定,有时候整体使用二分的时候我就害怕会对数据的整体性产生影响,畏手畏脚。
可是二分本就不对数据结构产生影响,这几天我要多看一些关于二分的思想,在b站看大佬。
我的思路就和写的一样,即躲避这些较大的数字。但我在写完程序之后才发现事情没我想的那么简单。因为每朵花不是一个割裂的个体,一束花需要一段连续的花,即避开开花天数很久的花以后,也会造成无法正确组成花束的情况。接下来debug就很困难了。我真是服了我自己了,朴素贝叶斯完了脑袋也朴素了是吧?看看大佬的二分思想,又快又准。

  • 大佬题解
/*----------------------------------------------------------------------------------------------------------------*/
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) {
                flowers++;
                if (flowers == k) {
                    bouquets++;
                    flowers = 0;
                }
            } else {
                flowers = 0;
            }//只要遇到不够天数的,花儿数量立马归零,之后指针继续移动
        }
        return bouquets >= m;
    }
};

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

每束花需要k朵花,需要制作m束花,因此一共需要 k * m 朵花。
1、考虑特殊情况,若 bloomDay 的长度小于 k * m 的话直接返回 -1 不解释
2、创建辅助函数,用于判断在给定的天数嫩否制作出指定数量的花束,辅助函数的参数除了 bloomday 、m 和 k 之外,还需要一个参数days表示指定的天数。
(注:辅助函数的实现,可以遍历数组bloomDay, 计算其中的长度为 k 且最大元素不超过 days的不重合的连续子数组的数量,如果符合要求的不重合的连续子数组的数量大于或等于 m 则返回 true,否则返回false。)
3、二分思想:当 days 很小的时候,辅助函数总是返回 false ,因为天数太少不能收起 m 个花束;当 days很大的时候,辅助函数总是返回 true ,所以我们可以认为这个辅助函数是关于 days递增的。于是,我们可以通过二分查找得到最小天数。在确保可以制作出指定数量的花束的情况下,所需的最少天数一定不会小于数组 bloomDay 中的最小值,一定不会大于数组 bloomDay 中的最大值,因此二分查找的初始值是 low 等于数组 bloomDay 中的最小值,high 等于数组 bloomDay 中的最大值。
4、当 low 和 high的值相等时,二分查找结束,此时low的值即为最小天数。

canMake()太妙了

深入解析高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计 本文深入解析了高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计,详细介绍了Adreno DPU的核心模块组成、显示接口设计以及DRM驱动架构。通过实际案例和调试技巧,帮助开发者理解硬件与软件的协同工作原理,优化显示性能并解决常见问题。 阅读详情

相关推荐

stm32F103定时器使用方法

文章目录1、STM32的Timer简介2、普通定时器TIM2-TIM52.1 时钟来源2.2 计数器模式2.3 编程步骤3、程序源代码4、总结 1、STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟

weixin_43582209的博客 4515

Leetcode 322. 零钱兑换——DP问题总结————重复书写硬币问题

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 原题地址:零钱兑换 或直转到:https://leetcode-cn.com/problems/coin-change/ 由于直接上动态规划中等难度的题我有点晕,这直接借鉴一下知乎大佬的文章,并加入自己的理解。 先上代码 int min(int a, int b) { return a &lt.

小学生高某的博客 609

用rsl_rl训练四足机器人走梅花桩:PPO算法调参实战与避坑指南

本文详细介绍了如何使用rsl_rl框架和PPO算法训练四足机器人在梅花桩上行走的实战经验。通过分析梅花桩场景的独特挑战,提供PPO算法关键参数配置策略、奖励函数设计方法以及常见问题的解决方案,帮助开发者高效实现机器人平衡控制。文章特别强调了仿真到实机的过渡技巧,最终实现98%的过桩成功率。

weixin_29103191的博客 220

2019年7月26日 今天对Unity进行一些基础上的的理解和巩固

过去上来就是一些应用,现在是对基础知识的学习和已许欸知识的巩固。 一、窗口界面 Scene 场景编辑窗口 小手图标:拖动屏幕并进行移动 指针图标:移动选择物体的唯一 旋转:相对旋转 修改:改变物体的scale 在Scene中一直按着鼠标右键可以对视角进行旋转,期间按照asdw可以进行视角的移动,按qe可以升高或者降低视角 Game 游戏呈现画面 游戏运行当中修改不会存盘,且游戏窗口左上角可...

小学生高某的博客 580

第1章第11节:创建可容纳多行滚动文字的输入框TextEditor [SwiftUI快速入门到实战]

TextField可以让用户输入单行的文字内容,若想输入多行的文字内容,可以使用能够容纳多行滚动文字的 TextEditor。 定义一个字符串属性,用来存储用户输入的文字内容。接着定义一个布尔属性,用来标识是否弹出警告窗口,以显示用户输入的内容。 TextEditor是由UIKit中的UITextView演变而来,因此可以在init方法中,通过UITextView修改TextEditor的外观属性。 添加一个VStack视图,作为子视图的容器。 创建一个TextEditor,Te..

互动教程网[www.hdjc8.com] 832

基于QT+Halcon实现线序识别

一、线序识别算法步骤。 1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。 2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。 3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。 4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1748

2019年7月28日 恶心人

今天我一个早上都在debug,一个bug,弄了我一天多。角色为什么在静止的时候速度不为0? ` 以下是更新函数 {//移动 pendingVelocity.z = 0f; cc.Move(pendingVelocity * Time.deltaTime); animator.SetFloat("Speed", cc.velocity.magnitude); an...

小学生高某的博客 563

Python-增加b站视频播放量

如果条件允许的情况下,有代理API更好,每次请求url调用API也更方便。如果没有的话,也不用担心,网上本身也有着很多免费国内代理,不过代理是否可用需要自己花点时间去检测,检测方法笔者这里就不详述了,后面有时间的话会单独针对这一块做详细说明。在开始之前,需准备代理IP。总之,在每次请求url的时候,随机带入某个IP防止被平台检测,便于达到增加播放量预期。大致思路就是针对你的目标代理平台进行IP抓取,并存入到自己本地的IP代理池。本文是该专栏的第1篇,后面会持续更新对应平台干货知识,记得关注。

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 5209

2019年7月20日学习日记

嘻嘻,坚持下来了,第六天,第四个游戏也完成了。其中其中真的有好多艰辛,加油。 下面的总结接上19号的博客。之前已经实现了大部分,得分以及游戏结束的UI已经设置了,差的不多了。今天遇到了让我脑袋爆炸的几个问题。首先,先从简单的说起。由于这个游戏是闯关游戏,我们要设置障碍。因为物体的运动是最基本的,我们最先对物体运动以及基本碰撞是没毛病的。在此基础上我们设置关卡。 先是对模型的拖拽,组成一个通道,其中...

小学生高某的博客 534

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2172

24、语料库与科技术语库建设

本文探讨了语料库在科技术语库建设中的关键作用,重点分析了词性标注、索引、搭配、词形还原、频率计数、词汇排序和类型-标记分析等核心技术的应用与挑战。文章以印度语言为例,指出其语料库处理工具匮乏的现状,强调需开发适配本地语言特征的技术,并提出一个整合多种处理步骤的综合流程,旨在推动印度语言科技术语数据库的系统化建设,促进科技语言的发展与应用。

cola5的博客 91

2019年7月21日学习日记

今天今天小bug弄了我我半天,得了,这第四个游戏是半成品,不过也要把今天累计的经验和教训总结一下。 1、拉入场景,拉入新相机,拉入新角色 2、仔细一看,这次给的场景和我们做flappybird时候给的有异曲同工之妙,都是两块,再仔细想,这次我们也要执行拼接和背景的平移以完成道路一直有的任务。 3、其次拉入的任务要创建新的根节点装上去,并且创建collider和rigidbody,并提前把anima...

小学生高某的博客 502

【华为OD机试真题】390、AI面板识别 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。   由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2,y2),   请输出先行后列排序的指示灯的编号,排序规则:   1、每次在尚未排序的灯中挑选最高的灯作为的基准灯   2、找出和基准灯属于同一行所有的灯进行排序。两个灯高低偏差不超过灯半径算同一行(即两个灯坐标的差 ≤ 灯高度的一半)

KJ.JK 1802

2019年7月18日 学习日记

由于今天没有边看视频边写,事情有一点多,我就在一起总结了。这第三个游戏是横版跳跃游戏,其实仔细想想和第三个游戏差不多,其模型的给予大大降低了我们制作游戏的难度。我会从第一步到最后一步慢慢滤清思路,而不像昨天一样列出重点后写一坨。44:30 加入材质包 拉入过关所需台阶,并赋予其不同颜色,tag也要改变,以便于做出区别。游戏的规则是人和台阶不同颜色的时候会死,因此设置触发器也要有相应的判断依...

小学生高某的博客 434

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Leetcode 91. 解码方法——————从我刷了五十多道力扣后决定从C转向C++再由这题让我下定先好好学习算法的那些事

一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为: “AAJF” ,将消息分组为 (1 1 10 6) “KJF” ,将消息分组为 (11 10 6) 注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。 给你一个只含.

小学生高某的博客 411

WINCC7.3破解文件

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

2019年7月23日 学习日记

今天是放松的一天,没有学习,除了晚上把昨天的博客给补完了。

小学生高某的博客 398

2019年7月19日 学习日记

唉,今天的事情好多,压得我喘不过气,亲人的生日父母的思念哥们生病朋友的烦心事和组织内的人员动荡。影响了学习进度,让我脑袋晕晕的。这里我简单的对今天的学习做一下总结。 今天我学习做的是一个轻量版的flappy bird,从最开始的3d到如今的2d。感觉今天竟然比昨天简单,应该是有了基础并且真的是横版的入门。首先是3d背景的删除,是在window中的lighting选项,之后就要创建我们的游戏背景,分...

小学生高某的博客 389

2019年7月16日学习日记

** 2019年7月16日学习日记 ** Morning 今天主要学习前两个小游戏的制作,没有昨天那个游戏那么复杂,显得没有基础做起来比较费劲。今天是第一次用外接显示屏学习,以前都是直接用作放大的屏幕。win10对于外接显示屏有很好的兼容性,在滑动过程中虽然有一些累手腕,却没有什么不适感。能打打提高学习效率。 相比昨天做的横版过关游戏,今天这个简单多了。主要分为几个步骤。 第一步 第二步 ...

小学生高某的博客 381

2019年7月24日 学习日记

上一次(22日的学习日记中)我们最后提到了AI的制作,其实利用了时间的推移并把动作数据化按照参数传入方法,其中也不乏随机数。当然也有死亡时候特效的体现,复习了Instantiate方法的调用 ...

小学生高某的博客 375

2019年7月22日 学习日记

说实话今天是二十三号,不过我在补二十二号的博客,现在已经是晚上了,今天也发生了很多有趣的事情比如遇到了打伞也没有用的雨,倔强的我就算全身湿透也不愿放弃外出欣赏风景的机会,于是我买了一身新衣服加人字拖,松花江畔独自小酌。享受孤独和美好的景色也是生活的一部分。 让我们来进行一个回忆,这个过程可能和我第一天的日记有一些重叠,不过不要在意,因为这是我从第一个游戏又做到第六个游戏了,刚开始我直接做第六个游戏...

小学生高某的博客 360

Leet Code 1816. 截断句子

句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。 例如,“Hello World”、“HELLO” 和 “hello world hello world” 都是句子。 给你一个句子 s​​​​​​ 和一个整数 k​​​​​​ ,请你将 s​​ 截断 ​,​​​使截断后的句子仅含 前 k​​​​​​ 个单词。返回 截断 s​​​​​​ 后得到的句子。 我的题解 char * truncateSentence(char * .

小学生高某的博客 338

C语言学习日记2021年3月21日

今天做题遇到了几个点,晚上系统地说一下。 与运算和或运算可能考的比较灵活,即可能在&&两边放式子,判断的式子会进行运算 忽略大小写比较字符串大小,大写字母和小写字母之间ASCII码差32,若第一个字符不一样,比较其字符ASCII即可,若一样,则一直找到第一个不一样的进行比较。 遇到了一道阴间改错,即输出字符串中连续出现两次以上的字符。不管错没错,其程序逻辑都和我的编程逻辑完全相悖。 百元买百鸡问题,for嵌套for,z由前两个for循环的变量确定,最后别忘了考虑小鸡的取整 最大公约数求法,

小学生高某的博客 306

2019年7月17日学习日记

** 第三天 ** 见天天气好晴朗处处好风光。早上好,今天刚打开U3d就出现了了一件不愉快的事情,打开相应的项目后材料包脚本包还在,而scene中的各个控件却不在了。这里就需要我们在Assets选项中选择我们已经创建的U3d类型文件,让其于scene同步。好的接下来让我们继续昨天的学习。 一转眼,上午已经过去了,拿出最后的半个小时做一下总结。让我们看看我们的程序中多出来了什么! 昨天我们刚刚实现了...

小学生高某的博客 303

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 216

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 330

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 385

[C++]:6.STL:vector

今天就要开始学vector容器,这节课我们主要学习vector中经常会用到的函数,并且给出该函数的模拟实现。话不多说,直接上干货。下面是本章的思维导图,那么,让我们开始吧!

2301_80817679的博客 136
上一篇: Leetcode_1482.制作m束花所需的最少天数
下一篇: Leetcode_001(Array)
Neepu_G.job
博客等级 码龄8年 7粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值