当前位置: 首页 > news >正文

算法训练营第三十九天 | LeetCode 738 单调递增的数字、LeetCode 968 监控二叉树

LeetCode 738 单调递增的数字

这题类似模拟,可以找出如下规律:

先将数字按位数从高位到低位存到一个整型数组中。在这个数组中,从左往右遍历,如果遇到一个两数相等,并且记录的这个变量之前没有赋过值,那么将前一个数的下标存放到该变量中。这是为了处理后一个数字需要减小造成前一个数字再次比后一个数字大的情况。当然,如果后面有一个数字比这两个数字都要大,那么这个变量就可以再次赋为-1了。如果在赋为前一个数下标之前,该变量已经被赋过值,这说明前面还有数和这两个数一样大,那么该变量的值不变就好。

上述的处理其实有些冗余,但都是方便我们在遇到前一个数大于后一个数时,能够放心地减一,并把后面的数全部置为9,这就是我们找到的规律。感兴趣的小伙伴也可以自行去推导前面一段的推导过程。

代码如下:

class Solution {public int monotoneIncreasingDigits(int n) {if (n == 0) return 0;if (n / 10 == 0 ) return n;int res = 0;int w = 0;int temp = n;while (n > 0) {n /= 10;w++;}n = temp;int[] c = new int[w];int i = w;while (n > 0) {c[i - 1] = n % 10;n/=10; i--;}int index = -1;for (i = 0; i < w; i++) {if (i + 1 < w && c[i + 1] == c[i]) {if (index == -1) index = i;}if (i + 1 < w && c[i + 1] > c[i]) {if (index != -1) index = -1;} if (i + 1 < w && c[i + 1] < c[i]) {if (index != -1) {if (c[i] > c[index]) {c[i]--;while (i + 1 < w) {c[++i] = 9;}} else {c[index]--;i = index + 1;while (i < w) {c[i++] = 9;}}} else {c[i]--;while (i + 1 < w) {c[++i] = 9;}}}}for (i = 0; i < w; i++) {res *= 10;res += c[i];}return res;}
}

LeetCode 968 监控二叉树

本题大致意思是从底往上推,若是从上往下推能节省的数目其实不大。之所以用贪心也是因为这个原因。

一个节点状态去我们分为3种:为0表示无监控也无覆盖,为1表示有覆盖,为2表示是监控。

空姐点视作有覆盖,叶子节点视作无覆盖。

分情况讨论:

左右节点其中一个为0,则当前节点必须要有监控;

左右节点都为1,当前节点无覆盖,等上层节点设监控

左右节点其中一个为2,当前节点有覆盖,返回1

.最后由于上面第二种情况和一些特别的情况,最后根节点还要再判断下。

代码如下:

class Solution {int sum = 0;
public:int state(TreeNode* root) {if (!root) return 1;if (!root->left && !root->right) return 0;int left = state(root->left);int right = state(root->right);if (left == 0 || right == 0) {sum++;return 2;}if (left == 1 && right == 1) return 0;if (left == 2 || right == 2) return 1;return 0;}int minCameraCover(TreeNode* root) {if (!root) return 0;int left = state(root->left);int right = state(root->right);if (left == 0 || right == 0) {sum++; }if (left == 1 && right == 1) sum++;return sum;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 非整数倍数据位宽转换24to128
  • Meta发布Chameleon模型预览,挑战多模态AI前沿
  • Softing工业推出新品edgeGate:一款用于工业边缘和云应用的硬件网关
  • 使用VirtualBox+vagrant创建CentOS7虚拟机
  • 简易进程池的实现
  • MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端
  • 家政服务,让您的家更温馨
  • C++ 数据结构算法 学习笔记(32) -五大排序算法
  • AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月25日预测第1弹
  • 【机器学习】大模型在机器学习中的应用:从深度学习到生成式人工智能的演进
  • 【AI大模型】这可能是最简单的本地大模型工具,无须部署,一键使用
  • Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片
  • XH连接器>KH-XH-5A-Z
  • 【全部更新完毕】2024电工杯A题数学建模详细思路代码文章分享
  • 【C++高阶(一)】继承
  • flutter的key在widget list的作用以及必要性
  • HTML中设置input等文本框为不可操作
  • React-flux杂记
  • text-decoration与color属性
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 数组的操作
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # SpringBoot 如何让指定的Bean先加载
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #include<初见C语言之指针(5)>
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1)(1.9) MSP (version 4.2)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Java)【深基9.例1】选举学生会
  • (Java数据结构)ArrayList
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (一)基于IDEA的JAVA基础12
  • (转) Face-Resources
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)LINQ之路
  • (自用)网络编程
  • .“空心村”成因分析及解决对策122344
  • .apk文件,IIS不支持下载解决
  • .form文件_SSM框架文件上传篇
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net连接oracle数据库
  • .NET企业级应用架构设计系列之应用服务器
  • .NET中使用Protobuffer 实现序列化和反序列化
  • /etc/motd and /etc/issue
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [\u4e00-\u9fa5] //匹配中文字符
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [C/C++]数据结构 栈和队列()
  • [C++]18:set和map的使用
  • [C++]unordered系列关联式容器