贪心算法day31|56. 合并区间、738. 单调递增的数字(整数与字符串的转换)、贪心刷题总结

devtools/2024/9/19 6:33:28/ 标签: 贪心算法, 算法, leetcode, c++, 字符串

算法>贪心算法day31|56. 合并区间、738. 单调递增的数字、贪心刷题总结

  • 56. 合并区间
  • 738. 单调递增的数字
  • 贪心刷题总结

56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104
class Solution {
public:static bool cmp(vector<int>&a,vector<int>&b){if(a[0]==b[0])return a[1]<b[1];return a[0]<b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()==1)return intervals;sort(intervals.begin(),intervals.end(),cmp);vector<vector<int>> result;for(int i=1;i<intervals.size();i++){if(intervals[i][0]<=intervals[i-1][1]){intervals[i][0]=intervals[i-1][0];intervals[i][1]=max(intervals[i][1],intervals[i-1][1]);}else{result.push_back(intervals[i-1]);}}result.push_back(intervals[intervals.size()-1]);return result;}
};

这道题还是比较容易的。核心思路:当重叠时,两个区间取并集;当不重叠时,再插入到result数组中。至于为什么要这样,一方面处于经验,另一方面你需要有整体性的思维,思考整个循环的情况,而不仅仅是这一层循环。

738. 单调递增的数字

当且仅当每个相邻位数上的数字 xy 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增

示例 1:

输入: n = 10
输出: 9

示例 2:

输入: n = 1234
输出: 1234

示例 3:

输入: n = 332
输出: 299

提示:

  • 0 <= n <= 109
class Solution {
public:int monotoneIncreasingDigits(int n) {string str=to_string(n);int flag=str.size();for(int i=str.size()-1;i>0;i--){if(str[i-1]>str[i]){str[i-1]--;flag=i;}}for(int i=flag;i<str.size();i++){str[i]='9';}return stoi(str);}
};

核心思路:首先将正数转换为字符串,然后从后往前遍历,当遇到非递增情况时,如千位比百位大,要将千位减一,然后用flag标记百位,目的是将百十个位全部赋位9,至此OK

难点:

  • 转换成字符串

    这是处理正数位的一般性套路,需要把正数转化成字符串,这样方便处理。

  • 从后往前遍历,而不是从前往后

    前者从低位到高位,最后flag记录的是最高位处非递增的情况,低位的情况也会被直接覆盖。后者在位减一之后由于前面的高位已经遍历过了,不能回头了,可能会造成减一之后比前面的位上的数小,这又造成了非递增。所以,要把最后的生杀大权交给最高位

易错点:

  int flag=str.size();

flag初始化时不能为0

 str[i-1]--;

当出现非递增时,只减一

贪心刷题总结


(这个图来自代码随想录知识星球 (opens new window)成员:海螺人 (opens new window))


http://www.ppmy.cn/devtools/113470.html

相关文章

keep-alive缓存不了iframe

最近做了个项目&#xff0c;其中有个页面是由 iframe 嵌套了一个另外的页面&#xff0c;在运行的过程中发现 KeepAlive 并不生效&#xff0c;每次切换路由都会触发 iframe 页面的重新渲染&#xff0c;代码如下&#xff1a; <router-view v-slot"{ Component }">…

记录近期iOS开发几个报错及解决方案

记录近期iOS开发几个报错&#xff5e; 1、报错&#xff1a;SDK does not contain ‘libarclite’ at the path ‘/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a’; try increasing the minimum …

克隆虚拟机,xshell无法传文件,windows无法ping克隆虚拟机,已解决

克隆了虚拟机命名为hadoop01 自定义ip地址&#xff0c;在合理的范围内自己定义一个&#xff0c;先用ifconfig查看ens33 ip地址&#xff0c;根据这个数值自定义&#xff0c;这一步容易出现问题&#xff0c;后面解决了。 linux下可以ping baidu 但是windows下无法ping 自定义的…

GFS 分布式文件系统 GlusterFS

一、GlusterFS概述 1.1、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba 存储网关&#xff08;可选&#xff0c;根据需要选择使用&#xff09;组成。 包括其去中心化&#xff08;无元数据服务器&#xff09;的特性&#xff0c;这有…

离散制造与流程制造的差异分析

目录 1. 离散制造和流程制造的定义 2、离散制造和流程制造的差异 3、离散行业价值链特点和挑战 &#xff08;1&#xff09;价值链定义 &#xff08;2&#xff09;离散行业采购环节的特点和挑战 &#xff08;3&#xff09;离散行业制造环节的特点和挑战 4、离散行业产业链…

openssl的使用

1、编译 Github下载&#xff1a;https://github.com/openssl/openssl 官网下载&#xff1a;https://openssl-library.org/source/index.html 官网历史版本&#xff1a;https://www.openssl.org/source/old/ 1.1 Windows下编译 我的文章&#xff1a;OPC UA使用 Openssl库编译…

PDF——压缩大小的方法

方法一&#xff1a;QQ浏览器->格式转换->PDF转纯图PDF

kotlin的密封类

引言 密封类是一种特殊的类&#xff0c;它用来表示受限的类继承结构&#xff0c;即一个类只能有有限的几种子类&#xff0c;而不能有任何其他类型的子类。 这不就是JAVA的枚举么。 概念 密封类使用sealed关键字声明&#xff0c; 在Kotlin 1.0中&#xff0c;密封类的所有子…

重修设计模式-结构型-装饰器模式

重修设计模式-结构型-装饰器模式 在不修改原有类代码的情况下&#xff0c;通过创建包装类&#xff08;即装饰器&#xff09;给对象添加一些额外的功能。 装饰器模式&#xff08;Decorator Pattern&#xff09;允许在不修改原有类代码的情况下&#xff0c;通过创建一系列包装类来…

机器学习-深度学习数据集之打架斗殴识别数据集

关于“打架识别数据集”&#xff0c;这是一个专门设计用于训练计算机视觉模型以识别打架、摔倒以及持械行为的数据集。此类数据集对于开发安全监控系统至关重要&#xff0c;可以帮助在公共场所如学校、酒吧或地铁站等地及时发现潜在的暴力事件&#xff0c;从而快速采取行动来防…

【混淆矩阵】Confusion Matrix!定量评价的基础!如何计算全面、准确的定量指标去衡量模型分类的好坏??

【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01; 如何计算全面、准确的定量指标去衡量模型分类的好坏&#xff1f;&#xff1f; 文章目录 【混淆矩阵】Confusion Matrix&#xff01;定量评价的基础&#xff01;1. 混淆矩阵2.评价指标3.混淆矩阵及评价指标…

UVM仿真的运行(四)—— objection 机制

0. 引言 前面介绍了uvm仿真的启动,按照domain中指定的DAG的phase node 顺序执行各个组件的phase。 在执行run_phase node的Executing 状态时,以fork...join_none的方式在后台调用run_phase imp的traverse方法去并行执行各个component的run_phase方法,同时会等待task运行结…

【YashanDB知识库】数据库获取时间和服务器时间不一致

本文转自YashanDB官网&#xff0c;具体内容可见数据库获取时间和服务器时间不一致 【问题分类】功能使用 【关键字】服务器时间、数据库时间 【问题描述】数据库获取的时间和服务器时间不一致。 【问题原因分析】YashanDB并没有时区的概念&#xff0c;数据库的时间以数据库启…

大数据Flink(一百一十六):Flink SQL的时间属性

文章目录 Flink SQL的时间属性 一、Flink 三种时间属性简介 二、Flink 三种时间属性的应用场景 三、​​​​​​​SQL 指定时间属性的两种方式 四、​​​​​​​​​​​​​​SQL 处理时间DDL定义 五、​​​​​​​​​​​​​​SQL 事件时间DDL定义 Flink SQL的时…

「OC」事件点击demo合集

「OC」事件点击demo合集 文章目录 「OC」事件点击demo合集前言可用鼠标移动的UIview突出的tabBar按钮扩大按钮的响应范围 前言 在前面通过学习事件响应流程&#xff0c;学习了许多新的内容&#xff0c;当然也学习了许多不同的用法&#xff0c;但在之前的文章之中并没有将运用到…

执行matlab后进行RTL功能仿真check

1 背景简介 最近在做算法的RTL实现&#xff0c;算法是通过matlab来写的&#xff0c;但RTL设计做完了还需要进行多场景仿真&#xff0c;和算法进行一一比对&#xff0c;由于功能case较多&#xff0c;每跑一次仿真都要先手动跑一次算法&#xff0c;然后再跑一次功能仿真&#xf…

轻松上手!三大热门视频剪辑工具大PK!

视频剪辑是现代数字创作的重要组成部分&#xff0c;无论是专业影视制作还是日常生活的记录分享&#xff0c;一款合适的视频剪辑软件都能让你的作品更上一层楼。今天&#xff0c;我们就来聊聊几款市面上比较热门的视频剪辑软件&#xff0c;看看它们在视频剪辑中的表现如何。 一…

递归10小题

注&#xff1a;操作数字的数组均为int [ ]型&#xff0c;操作字符串均为char [ ]型 下面的10个问题很常见&#xff0c;在这里都是用递归解决的。涉及到数组的问题&#xff0c;需要有指针的知识。 1.求1到n的和 int getSum(int n)//求1到n的和 {if(n1){return 1;}return ngetS…

C语言——错误处理机制errno

前言 在C语言中&#xff0c;错误处理主要是通过全局变量 errno 和相关的错误处理函数来实现的。errno 是一个全局整型变量&#xff0c;用于存储最近发生的系统调用或库函数调用失败的原因。当一个系统调用或库函数调用失败时&#xff0c;通常会设置 errno 的值&#xff0c;并返…

面试题总结(三) -- 内存管理篇

面试题总结(三) – 内存管理篇 文章目录 面试题总结(三) -- 内存管理篇<1> C 中堆内存和栈内存的区别是什么&#xff1f;<2> 如何在 C 中手动管理内存&#xff08;new/delete 操作符&#xff09;&#xff1f;<3> C 中内存泄漏的原因和避免方法<4> 谈谈…