算法D37 | 贪心算法6 | 738.单调递增的数字 968.监控二叉树

2024-03-07 07:28

本文主要是介绍算法D37 | 贪心算法6 | 738.单调递增的数字 968.监控二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

738.单调递增的数字 

代码随想录

Python:

尝试了下写成非string修改的,会复杂一点。

class Solution:def monotoneIncreasingDigits(self, n: int) -> int:str_num = list(str(n))for i in range(len(str_num)-1, 0, -1):if str_num[i-1] > str_num[i]:str_num[i-1] = str(int(str_num[i-1]) - 1)for j in range(i, len(str_num)):str_num[j] = '9'result = 0for s in str_num:result = result*10 + int(s)return result

C++:

优化了一下,第一遍先更新flag指针;第二遍更新后续的9,比python版本稍优。

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

968.监控二叉树 (可以跳过)

本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。 

代码随想录

Python:

思路还是比较直接的,动手画一画,需要耐心把不同情况梳理清楚。关键思路是把状态(0, 1, 2)分清楚。

class Solution:def __init__(self):self.result = 0def traversal(self, cur):# 后序遍历# 终止条件:空节点,该节点有覆盖if not cur: return 2left = self.traversal(cur.left)right = self.traversal(cur.right)# 1. 左右节点都有覆盖if left == 2 and right == 2: return 0# 2. 左右节点至少有一个无覆盖if left == 0 or right == 0:self.result += 1return 1# 3. 左右节点至少有一个有摄像头if left == 1 or right == 1: return 2def minCameraCover(self, root: Optional[TreeNode]) -> int:# 0:本节点无覆盖 1:本节点有摄像头 2:本节点有覆盖if self.traversal(root) == 0:self.result += 1return self.result

C++:

class Solution {
public:int result = 0;int traversal(TreeNode* cur) {// 后序遍历// 终止条件:空节点,该节点有覆盖if (cur==NULL) return 2;int left = traversal(cur->left);int right = traversal(cur->right);// 1. 左右节点都有覆盖if (left==2 && right==2) return 0;// 2. 左右节点至少有一个无覆盖if (left==0 || right==0) {result++;return 1;}// 3. 左右节点至少有一个有摄像头if (left==1 || right==1) return 2;return -1; // we shall never get here}int minCameraCover(TreeNode* root) {// 0:本节点无覆盖 1:本节点有摄像头 2:本节点有覆盖if (traversal(root)==0) {result++;}return result;}
};

总结 

可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。 

代码随想录

这篇关于算法D37 | 贪心算法6 | 738.单调递增的数字 968.监控二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/782773

相关文章

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个