代码随想录算法训练营 | 贪心算法 part05

news/2024/9/22 19:10:45/

56. 合并区间

56. 合并区间

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) {sort(intervals.begin(), intervals.end(), cmp);vector<vector<int>> res;int start = intervals[0][0];int end = intervals[0][1];for (int i = 1; i < intervals.size(); i++) {if (intervals[i][0] >= start && intervals[i][0] <= end) { // 与前面的区间有重叠if(intervals[i][1] >= end) { // 更新重叠区间的右端点end = intervals[i][1];}} else if (intervals[i][0] > end) { // 与前面的区间无重叠res.push_back({start, end});start = intervals[i][0];end = intervals[i][1];}}res.push_back({start, end});return res;}
};

738. 单调递增的数字

738. 单调递增的数字
当发现当前数字大于下一个数字时,就把当前数字减1,后面的所有数字都设置成 9

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

第二个for循环存在重复赋值;如:304537,在检测到5<4时,数字改为303999;在遇到0<3时,数字改为299999,最后两位数同样被再次赋值;
设置flag来标记赋值9从哪里开始,同时将赋值循环分离出来;

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

968. 监控二叉树

968. 监控二叉树

给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。

局部最优:让叶子节点的父节点安摄像头,所用摄像头最少
全局最优:全部摄像头数量所用最少

class Solution {
private:int res;int traversal(TreeNode* cur) {if (cur == NULL) return 2;int left = traversal(cur->left);    // 左int right = traversal(cur->right);  // 右if (left == 2 && right == 2) return 0;else if (left == 0 || right == 0) {res++;return 1;} else return 2;}
public:int minCameraCover(TreeNode* root) {res= 0;if (traversal(root) == 0) { // root 无覆盖res++;}return res;}
};

http://www.ppmy.cn/news/1510971.html

相关文章

Debian系统安装Docker

Debian系统安装Docker 更新软件包索引安装必要的软件包以允许apt通过HTTPS使用仓库添加Docker的官方GPG密钥设置Docker的稳定仓库再次更新软件包索引安装Docker CE&#xff08;社区版&#xff09;验证Docker是否安装成功 更新软件包索引 sudo apt-get update安装必要的软件包以…

linux内核启动流程

内核启动流程 准备工作&#xff1a;关闭 MMU、关闭 D-cache&#xff08;数据缓存&#xff09;&#xff08;I-Cache 指令缓存无所谓&#xff09; 第一阶段&#xff1a;内核引导阶段&#xff1a;汇编语言设置ARM处理器工作模式、使能MMU、设置一级页表&#xff0c;调用start_ke…

部署 K8s 图形化管理工具 Dashboard

文章目录 一、Dashboard 概述二、GitHub 地址三、Dashboard 部署安装1、选择兼容版本2、下载配置文件3、添加 Dashboard 的Service类型4、应用部署5、查看 kubernetes-dashboard 命名空间下资源状态6、创建访问账户7、授权8、获取账号token9、1.24 版本以后的需要创建一个Pod 四…

多种方案解决IOS下uni.share分享分包页面报错Error: Framework inner error

项目场景&#xff1a; 有个需求是用uni.share从app分享微信小程序&#xff0c;发现在苹果手机真机调试的时候 跳转的目标页面会白屏、页面样式错乱、一些组件不出现等问题。并且报错 Error: Framework inner error 问题描述 uniapp开发在苹果手机下app分享微信小程序会出现白…

C++(STL)的List解读

目录 list简介 list的几个特性 接口函数 1.默认成员函数 2.迭代器相关函数 3.容量相关的函数 4.成员访问相关的函数 5.modify系列 6.operation系列 7.重载在全局的函数 list简介 Lists are sequence containers that allow constant time insert and erase operation…

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试

【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试 文章目录 【RISC-V设计-13】- RISC-V处理器设计K0A之指令测试1.简介2.验证用例3.指令代码4.链接脚本5.编译脚本6.仿真结果6.1 复位结束6.2 运行成功6.3 终端打印 7.总结 1.简介 借助上一篇文章所提及的验证环境&#xff0c;…

C语言实现排序之快速排序算法

一、快速排序讲解 基本思想 快速排序的核心在于选择一个“基准”元素&#xff0c;然后通过一系列操作将数据分为两部分&#xff0c;使得一部分的所有元素都比另一部分的元素小。具体来说&#xff0c;选择一个基准元素后&#xff0c;所有比基准小的元素都会被移动到基准的左边&…

设计模式在芯片验证中的应用——状态

一、状态模式 状态模式是一种行为设计模式&#xff0c; 让你能在一个对象的内部状态变化时改变其行为&#xff0c; 使其看上去就像改变了自身所属的类一样。 在RTL中可能存在复杂的有限状态机FSM&#xff0c;在任何一个特定状态中&#xff0c; RTL的行为都不相同&#xff0c;…