【贪心算法】贪心算法六

贪心算法六

  • 1.坏了的计算器
  • 2.合并区间
  • 3.无重叠区间
  • 4.用最少数量的箭引爆气球

在这里插入图片描述

点赞👍👍收藏🌟🌟关注💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

1.坏了的计算器

题目链接: 991. 坏了的计算器

题目分析:

在这里插入图片描述

算法原理:

解法一:正向推导

以3转化成10为例,我们正向推导有两个操作x2,-1。

此时拿到3要么x2,要么-1,此时我们有一个小贪心的想法,为了更快到达,所以选择x2,得到6,这里也有两种选择要么x2,要么-1,如果延续刚才的贪心我们会x2,得到12,此时12比10大了,我们只能执行-1操作,得到11,再执行依次-1操作得到10,这里我们共进行了4次操作

在这里插入图片描述

但是我们发现如果再6的时候,不去x2,而去-1,得到5,然后在去x2,就得到10,总共才3次操作,反而比刚才的小贪心更优。

在这里插入图片描述
所以说在面临一个数的时候,是x2 还是 -1操作,判断标准其实是依赖后面的数来判断前面是x2还是-1好。所以说如果正向推导有点难,我们可以尝试另一个思路。

解法二:正难则反

我们这道题明显可能反着来做,x2和-1 操作 可以变成/2和+1 操作。所以说我们能正向从3推导到10,那肯定能逆向推导回去。

在这里插入图片描述

假设我们要从end转化成begin(10 -> 3)

正着难推导,难道逆着就好推导吗?确实是的,原因就在于这里/2操作,别忘了我们这道题是没有小数的,没有小数,那谁才能执行/2操作?那肯定是偶数,偶数/2能除尽,奇数/2除不尽。

所以面对奇数的时候只能执行+1操作,面对偶数我们在分情况讨论是/2还是+1。

在这里插入图片描述

  1. end <= begin

奇数依旧+1,当end <= begin的时候,偶数此时就没有必要执行/2操作。因为此时end都比begin小了难道你要/2之后在加1吗?那不如直接加1好了。所以end <= begin,奇数+1,偶数+1,而且这个+1操作也不用一次一次算,我们仅需 begin - end就得到要执行几次+1了。

在这里插入图片描述

  1. end > begin

奇数依旧+1,偶数要么/2,要么+1,此时这里我们有一个小贪心,因为end大于begin,我们想最少操作次数到达begin所以我们看似选择/2是更优的。

那这个贪心的想法对不对呢?

在这里插入图片描述
我们证明一下先除更优。

假设x是个偶数,并且大于begin。
如果不执行/2操作,而执行+1操作,那会得到一个奇数,但是奇数只能加1,然后又变成偶数了,又执行+1操作,又变成奇数,奇数只能+1,又变成偶数了。假设x一共加了k个1。这个k也是个偶数,如果k是奇数接下来还要+1总归要把它先加成一个偶数才行。

x + k 是大于 begin,必然会执行一次 / 2操作,你想把大的数变成小的数不执行除法操作怎么才能变小呢?所以无论加上多少1最终都会执行一次/2操作,变成(x+k)/2,次数这种操作执行的次数就是 k + 1次

在这里插入图片描述
但是如果拿x这个数变成(x+k)/2,先执行/2操作变成 x/2,然后仅需在x/2的基础上加上k/2,就得到(x+k)/2,这种执行操作次数是 1 + k/2次,是比上面执行次数小的。

在这里插入图片描述

所以说当 end > begin ,面对偶数我们也不需要分类讨论,仅需执行/2操作。奇数+1,偶数/2,一直到end <= begin的时候,执行begin - end就可以得到整个操作次数。

在这里插入图片描述

class Solution {
public:int brokenCalc(int startValue, int target) {// 正难则反 + 贪心int ret = 0;while(target > startValue){if(target % 2) target++;else target /= 2;++ret;}return ret + startValue - target;}
};

2.合并区间

题目链接: 56. 合并区间

题目分析:

在这里插入图片描述

给一个二维矩阵,每一行表示一个区间,里面有两个元素第一个表示左端点,第二个表示右端点,请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

有重叠的部分合并相当于就是求并集。注意示例2这个特殊的情况[1,4]和[4,5]也需要合并,也就是仅有一个点重叠也是可以合并。

在这里插入图片描述

算法原理:

关于贪心里面的区间问题的解法,我们都是固定的解法。

  1. 排序
  2. 根据排序后的结果,总结出一些规律,进而得出解决这个问题的策略

关于第2点也可以先提出一个解决问题的策略,进而总结出一些规律。

关于第1点排序,是分为两大类的,其中第一类是按照左

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

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

相关文章

直播预约 | CATIA MODSIM SmartCAE带练营第3期:让每轮设计迭代都快人一步!

▼▼免费报名链接▼▼ 达索系统企业数字化转型在线研讨会https://3ds.tbh5.com/EventDetail.aspx?eid1195&frpt 迅筑官网 ​​

OSI参考模型TCP/IP模型 二三事

计算机网络的学习离不开OSI参考模型&TCP/IP模型对各层功能与任务的了解就是学习的主要内容其二者的区别也是我们应该了解的其中 拥塞控制和流量控制 就是各层功能中 两个易混淆的概念流量控制&#xff08;Flow Control&#xff09;&#xff1a;解决的是发送方和接收方之间速…

DataStream实现WordCount

目录读取文本数据读取端口数据事实上Flink本身是流批统一的处理架构&#xff0c;批量的数据集本质上也是流&#xff0c;没有必要用两套不同的API来实现。所以从Flink 1.12开始&#xff0c;官方推荐的做法是直接使用DataStream API&#xff0c;在提交任务时通过将执行模式设为BA…

imx6ull-驱动开发篇37——Linux MISC 驱动实验

目录 MISC 设备驱动 miscdevice结构体 misc_register 函数 misc_deregister 函数 实验程序编写 修改设备树 驱动程序编写 miscbeep.c miscbeepApp.c Makefile 文件 运行测试 MISC 驱动也叫做杂项驱动&#xff0c;也就是当某些外设无法进行分类的时候就可以使用 MISC…

C# 项目“交互式展厅管理客户端“针对的是“.NETFramework,Version=v4.8”,但此计算机上没有安装它。

C# 项目“交互式展厅管理客户端"针对的是".NETFramework,Versionv4.8”&#xff0c;但此计算机上没有安装它。 解决方法&#xff1a; C# 项目“交互式展厅管理客户端"针对的是".NETFramework,Versionv4.8”&#xff0c;但此计算机上没有安装它。 下载地址…

FFmpeg及 RTSP、RTMP

FFmpeg 是一个功能强大的跨平台开源音视频处理工具集 &#xff0c;集录制、转码、编解码、流媒体传输等功能于一体&#xff0c;被广泛应用于音视频处理、直播、点播等场景。它支持几乎所有主流的音视频格式和协议&#xff0c;是许多媒体软件&#xff08;如 VLC、YouTube、抖音等…

金山办公的服务端开发工程师-25届春招笔试编程题

1.作弊 溪染&#xff1a;六王毕&#xff0c;四海一&#xff1b;蜀山兀&#xff0c;阿房出。覆压三百余里&#xff0c;隔离天日。骊山北构而西折&#xff0c;直走咸阳。二川溶溶&#xff0c;流入宫墙。五步一楼&#xff0c;十步一阁&#xff1b;廊腰缦回&#xff0c;檐牙高啄&am…

注意力机制中为什么q与k^T相乘是注意力分数

要理解 “qkT\mathbf{q} \times \mathbf{k}^TqkT 是注意力分数”&#xff0c;核心是抓住注意力机制的本质目标 ——量化 “查询&#xff08;q&#xff09;” 与 “键&#xff08;k&#xff09;” 之间的关联程度&#xff0c;而向量点积&#xff08;矩阵相乘的元素本质&#xff…

Krea Video:Krea AI推出的AI视频生成工具

本文转载自&#xff1a;Krea Video&#xff1a;Krea AI推出的AI视频生成工具 - Hello123工具导航 ** 一、平台定位与技术特性 Krea Video 是 Krea AI 推出的 AI 视频生成工具&#xff0c;通过结合关键帧图像与文本提示实现精准视频控制。用户可自定义视频首尾帧、为每张图片设…

C++初阶(2)C++入门基础1

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式 等。熟悉C语言之后&#xff0c;对C学习有一定的帮助。 本章节主要目标&#xff1a; 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理的地方…

ANSI终端色彩控制知识散播(II):封装的层次(Python)——不同的逻辑“一样”的预期

基础高阶各有色&#xff0c;本原纯真动乾坤。 笔记模板由python脚本于2025-08-22 18:05:28创建&#xff0c;本篇笔记适合喜欢终端色彩ansi编码和python的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述…

前端无感刷新 Token 的 Axios 封装方案

在现代前端应用中&#xff0c;基于 Token 的身份验证已成为主流方案。然而&#xff0c;Token 过期问题常常困扰开发者 —— 如何在不打断用户操作的情况下自动刷新 Token&#xff0c;实现 "无感刷新" 体验&#xff1f;本文将详细介绍基于 Axios 的解决方案。什么是无…

【数据结构】线性表——链表

这里写自定义目录标题线性表链表&#xff08;链式存储&#xff09;单链表的定义单链表初始化不带头结点的单链表初始化带头结点的单链表初始化单链表的插入按位序插入带头结点不带头结点指定结点的后插操作指定结点的前插操作单链表的删除按位序删除&#xff08;带头结点&#…

容器安全实践(三):信任、约定与“安全基线”镜像库

容器安全实践&#xff08;一&#xff09;&#xff1a;概念篇 - 从“想当然”到“真相” 容器安全实践&#xff08;二&#xff09;&#xff1a;实践篇 - 从 Dockerfile 到 Pod 的权限深耕 在系列的前两篇文章中&#xff0c;我们探讨了容器安全的底层原理&#xff0c;并详细阐述…

百度面试题:赛马问题

题目现在有25匹马和一个赛马场&#xff0c;赛马场有5条跑道&#xff08;即一次只能比较5匹马&#xff09;&#xff0c;并且没有秒表等计时工具&#xff0c;因此每次赛马只能知道这5匹马的相对时间而非绝对时间。问&#xff1a;如何筛选出跑的最快的3匹马&#xff1f;需要比赛几…

centos下安装Nginx(搭建高可用集群)

CentOS-7下安装Nginx的详细过程_centos7安装nginx-CSDN博客 centos换yum软件管理包镜像 CentOS 7.* 更换国内镜像源完整指南_centos7更换国内源-CSDN博客 VMware虚拟机上CentOS配置nginx后,本机无法访问 执行命令&#xff1a;/sbin/iptables -I INPUT -p tcp --dport 80 -j…

实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界

引言&#xff1a;WebRTC 的“光环”与现实落差 在实时音视频领域&#xff0c;WebRTC 常常被贴上“终极解决方案”的标签&#xff1a;浏览器原生支持、无需插件、点对点传输、毫秒级延迟&#xff0c;这些特性让它在媒体和开发者群体中拥有了近乎神话般的地位。许多人甚至认为&a…

基于深度学习的阿尔茨海默症MRI图像分类系统

基于深度学习的阿尔茨海默症MRI图像分类系统 项目概述 阿尔茨海默症是一种进行性神经退行性疾病&#xff0c;早期诊断对于患者的治疗和生活质量至关重要。本项目利用深度学习技术&#xff0c;基于MRI脑部扫描图像&#xff0c;构建了一个高精度的阿尔茨海默症分类系统&#xff0…

54 C++ 现代C++编程艺术3-移动构造函数

C 现代C编程艺术3-移动构造函数 文章目录C 现代C编程艺术3-移动构造函数场景1&#xff1a;动态数组资源转移 #include <iostream> #include <vector> class DynamicArray { int* data; size_t size; public: // 移动构造函数&#xff08;关键实现&#xf…

Sping Boot + RabbitMQ :如何在Spring Boot中整合RabbitMQ实现消息可靠投递?

Spring Boot整合RabbitMQ实现消息可靠投递全解析 在分布式系统中&#xff0c;消息中间件是解耦、异步、流量削峰的核心组件。RabbitMQ作为高可靠、易扩展的AMQP协议实现&#xff0c;被广泛应用于企业级场景。但消息传递过程中可能因网络波动、服务宕机等问题导致消息丢失&#…