代码随想录算法训练营第三十九天| 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

相关文章

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.