代码随想录算法训练营第三十九天| 738.单调递增的数字 、968.监控二叉树、总结

本文主要是介绍代码随想录算法训练营第三十九天| 738.单调递增的数字 、968.监控二叉树、总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

738.单调递增的数字

题目链接:738.单调递增的数字

文档讲解:代码随想录/单调递增的数字

视频讲解:视频讲解-单调递增的数字

状态:已完成(1遍)

解题过程 

看到题目的第一想法

这道题我的想法是从后往前遍历,如果此刻遍历的数字比前一位数字要小,那么此位数字及之后的位数的所有数字都得变成9,并且前一位数字要减一(如果是0那就也变9),至于再前一位不用管,遍历到前一位的时候会处理。

/*** @param {number} n* @return {number}*/
var monotoneIncreasingDigits = function(n) {let ans = n.toString().split('').map((num)=>Number(num));//Number--字符串--字符串数组--数组中每个字符串转换为Number方便运算for(let i = ans.length-1;i>0;i--){if(ans[i]<ans[i-1]){//只要出现一个位数的数字比前一位小,这一位和后面所有的都得变成9let index = i;while(index<ans.length){ans[index] = 9;index++;}//且前一位得减1ans[i-1] = ans[i-1] == 0?9:ans[i-1]-1;}}let outPut = Number(ans.map(String).join(''));//每一位Number的数组--字符串数组--单个字符串--Numberreturn outPut;
};

提交没有问题。 

看完代码随想录之后的想法 

大体思路差不多,就是有一处可以优化,只用记住最靠前的比前一位小的数字所在的位数之后再开个for循环把这一位之后的所有数字都改成9就可以了。

讲解代码如下:

/*** @param {number} n* @return {number}*/
var monotoneIncreasingDigits = function(n) {n = n.toString()n = n.split('').map(item => {return +item})let flag = Infinityfor(let i = n.length - 1; i > 0; i--) {if(n [i - 1] > n[i]) {flag = in[i - 1] = n[i - 1] - 1n[i] = 9}}for(let i = flag; i < n.length; i++) {n[i] = 9}n = n.join('')return +n
};

总结

感觉这道题相比于前面的抽象问题还是比较容易想到的,看三个例子就可以想出局部最优的思路。


 968.监控二叉树

题目链接:968.监控二叉树

文档讲解:代码随想录/监控二叉树

视频讲解:视频讲解-监控二叉树

状态:已完成(1遍)

解题过程  

看到题目的第一想法

这题我想不出来局部最优的思路。。感觉情况太多了,这题真挺复杂的感觉。(毕竟卡尔哥也说了一刷跳过)

 看完代码随想录之后的想法 

叶子结点不放摄像头,在叶子结点的父节点放摄像头。把握住这一个关键点就ok,这就是局部最优,再一步步往上遍历。

讲解代码如下:

/*** Definition for a binary tree node.* function TreeNode(val, left, right) {*     this.val = (val===undefined ? 0 : val)*     this.left = (left===undefined ? null : left)*     this.right = (right===undefined ? null : right)* }*/
/*** @param {TreeNode} root* @return {number}*/
var minCameraCover = function(root) {let result = 0function traversal(cur) {if(cur === null) {return 2}let left = traversal(cur.left)let right = traversal(cur.right)if(left === 2 && right === 2) {return 0}if(left === 0 || right === 0) {result++return 1}if(left === 1 || right === 1) {return 2}return -1}if(traversal(root) === 0) {result++}return result};

总结

采用后序遍历(左右中),因为要根据左右孩子的状态确定父节点是否放摄像头。

子节点的状态分为:0无摄像头也无摄像头覆盖覆盖、1有摄像头、2无摄像头但被摄像头覆盖。


贪心算法总结

 文档讲解:代码随想录/贪心算法总结

总结

  1. 贪心的本质就是局部最优解推出全局最优解;
  2. 贪心无固定套路、固定框架;

这篇关于代码随想录算法训练营第三十九天| 738.单调递增的数字 、968.监控二叉树、总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum