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

ops/2024/9/19 16:55:09/ 标签: 贪心算法, 算法, 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/ops/112633.html

相关文章

【C#】添加临时环境变量

在C#中&#xff0c;可以通过System.Environment类来添加临时环境变量。临时环境变量只在当前进程中有效&#xff0c;进程结束后变量即失效&#xff0c;不会写入系统的Path中。 using System;class Program {static void Main(){// 设置临时环境变量Environment.SetEnvironment…

Qt 定时器-定时备份

定时备份 在Qt 中&#xff0c;可以使用QTimer类来实现定时备份功能。以下是一个示例代码&#xff0c;每隔一段时间自动执行备份操作&#xff1a; #include <QTimer>QTimer timer; int backupInterval 24 * 60 * 60 * 1000;//备份间隔为24小时connect(&timer, &…

uniapp+vue+微信小程序实现侧边导航

效果&#xff1a;开始时图片一半隐藏&#xff0c; 手指划入侧边图片缓慢移出&#xff0c;划出缓慢移入隐藏 事件&#xff1a; touchstart 手指触摸开始 touchmove 手指触摸后移动 touchend手指离开 touchcancel被打断&#xff08;来电等&#xff09; tab立即离开 页面结构&…

Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)

Uniapp Vue3 Vite Uview Pinia 分商家实现购物车功能&#xff08;最新附源码保姆级&#xff09; 1、效果展示2、安装 Pinia 和 Uview3、配置 Pinia4、页面展示 1、效果展示 注意&#xff1a;这个演示图没有背景色&#xff0c;背景色建议在 App.vue 中新增代码实现全局背景色…

linux中将文本转为unix格式

在 Linux 中&#xff0c;可以使用dos2unix命令将文本文件转换为 UNIX 格式。下面是使用该命令的方法&#xff1a; 打开终端&#xff08;Terminal&#xff09;。在终端中&#xff0c;输入以下命令并按 Enter 键&#xff1a;dos2unix filename.txt其中 filename.txt 是你要转换格…

python实现多个pdf文件合并

打印发票时&#xff0c;需要将pdf合并成一个&#xff0c;单页两张打印。网上一些pdf合并逐渐收费&#xff0c;这玩意儿都能收费&#xff1f;自己写一个脚本使用。 实现代码&#xff1a; 输入pdf文件夹路径data_dir&#xff0c;统计目录下的“合并后的PDF”文件夹下&#xff0c;…

React中九大常用Hooks总结

useState() useState用于在函数组件中管理状态。 它返回一个包含当前状态和一个更新状态的函数的数组。更新状态的函数可以接受一个新的值&#xff0c;并更新状态。 import React, { useState } from react;function Counter() {const [count, setCount] useState(0);funct…

使用 Anaconda 环境在Jupyter和PyCharm 中进行开发

目录 前言 一、在特定环境中使用jupyter 1. 列出所有环境 2. 激活环境 3. 进入 Jupyter Notebook 二、在特定环境中使用pycham 1. 打开 PyCharm 2. 打开设置 3. 配置项目解释器 4. 选择 Conda 环境 5. 应用设置 6. 安装所需库&#xff08;如果需要&#xff09; 总结 &#x1f3…

Excel数据转置|Excel数据旋转90°

Excel数据转置|Excel数据旋转90 将需要转置的数据复制在旁边空格处点击鼠标右键&#xff0c;选择图中转置按钮&#xff0c;即可完成数据的转置。&#xff01;&#xff01;&#xff01;&#xff01;非常有用啊啊啊&#xff01;&#xff01;&#xff01;

Vue3项目打包报错-内存溢出解决方法

错误&#xff1a;FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1、安装cross-env和increase-memory-limit 命令行&#xff1a;npm install cross-env increase-memory-limit 2、package.json添加如下内容&a…

Python+Selenium4 Web自动化测试框架

简介 PythonSelenium4 Web自动化测试框架是一个强大的工具&#xff0c;它可以帮助开发者自动化测试Web应用程序。Selenium是一个开源的自动化测试工具&#xff0c;它可以模拟用户在浏览器中的行为。 实现 安装库&#xff1a; pip install selenium 打开浏览器​​​​​​​…

【JAVA基础】实现Tomcat基本功能

文章目录 TCP/IP协议Socket编程ServletTomcat 在搜索了两三天之后&#xff0c;也是大概弄懂了Tomcat是个什么东西&#xff0c;我们在说Tomcat之前&#xff0c;先来了解一下下面这三个东西&#xff1a; TCP/IP协议 TCP/IP 是互联网通信的基础协议。TCP&#xff08;传输控制协议…

linux-安全管理-SELinux / AppArmor

Linux 安全管理&#xff1a;SELinux 与 AppArmor 在现代Linux系统中&#xff0c;安全性管理是至关重要的任务&#xff0c;特别是随着互联网安全威胁的不断增加。为增强系统的安全性&#xff0c;Linux提供了两大主流的强制访问控制&#xff08;MAC&#xff0c;Mandatory Access…

【Java】基础语法介绍

目录 一、注释 二、标识符与关键字 三、输入和输出 3.1 输出 3.2 输入 四、数据类型 3.1 基本数据类型 3.2 引用数据类型 3.3 var关键字 五、运算符 六、分支和循环 5.1 分支 5.2 循环 七、类和对象 6.1 类的定义与对象的创建 6.2 空对象 6.3 类的属性 6.4 类…

Java进阶之集合框架(List)

【基本内容】 集合框架是Java编程开发中最常用的技术框架。Java的集合框架主要分为单列集合和双列集合&#xff0c;本章主要讲述单列集合。 单列集合的根接口是Collection接口&#xff0c;下分三个子接口&#xff1a;List、Set、Queue&#xff0c; 三个子接口的特征如下图表&am…

大厂校招:唯品会Java面试题及参考答案

SortedSet 的原理 SortedSet 是一个有序的集合接口,它继承自 Set 接口。在 Java 中,常见的实现类有 TreeSet。 TreeSet 实现了 SortedSet 接口,它使用红黑树来维护集合中元素的有序性。红黑树是一种自平衡的二叉搜索树,具有以下特点: 每个节点要么是红色,要么是黑色。根节…

Visual Studio Code 高效开发 C/C++ 插件推荐

Visual Studio Code 高效开发插件 C/C 由 Microsoft 提供的官方插件&#xff0c;支持语法高亮、智能感知、调试等功能&#xff0c;是 C/C 开发的基础插件。 C/C Themes 由 Microsoft 提供的官方主题插件&#xff0c;它旨在增强 C 和 C 代码的编辑体验&#xff0c;通过提供代码…

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel() 源码分析

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel 源码分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_ke…

OpenCore Legacy Patcher 2.0.0 发布,83 款不受支持的 Mac 机型将能运行最新的 macOS Sequoia

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.0) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

利基网站收入报告(更新至十月)

欢迎来到我的利基网站收入报告。这是我揭露当月我所有网站收入情况的地方。目前&#xff0c;我主要专注于一个核心网站&#xff0c;其余的不是重心&#xff0c;有些可能会在不久的将来出售。 为什么我分享我的利基网站收入报告&#xff1f; 需要旧报告&#xff1f; 2023年10月…