代码随想录算法训练营day37 || 738. 单调递增的数字,968.监控二叉树

视频讲解:

贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字_哔哩哔哩_bilibili

贪心算法,二叉树与贪心的结合,有点难...... LeetCode:968.监督二叉树_哔哩哔哩_bilibili

738. 单调递增的数字

思路:本题的关键在于降位。对于数n,如果其本身满足题目的单调要求,那么直接返回结果即可;如果不满足,那么他就要通过降位来寻找最大且合适的数,这里的降位的意思就是十位以上的位数大小进行缩减。通过观察,个位数字总是可以取到9,但是十位就需要在原来n十位的k基础上,在k-1与9之间选择一个合适的,这里的k-1就是降位,他将一个十位借给了个位,从而可以让个位取到9,并且也满足了个位一定大于等于十位;我们采用这种降维的思路以及位数越大持续递增的思路不断进行解题。

但是我最后的时间开销明显非常大,对其进行优化。我们可以看出在进行降位总是当前的某一位与其前一位出现了单调性不满足,因此需要大的一位降低1,使得后一位可以取得更多的数,然后满足单调增的需求。因此我们的目标就是找所以不满足单调性的地方,并且不满足单调性的k位置开始(k与k-1出现不满足),之后的数全部可以取9,然后k-1位进行降位。那么反复寻找出现错误的地方,然后不断更新或者降位,即可输出结果。那么我们归结一下最快的贪心策略,就是找到第一个出现不满足单调的位数t,然后t+1到末尾全部可以赋值为9,然后t位降位,降位后不满足大小的话,则从t位按照这个思路再继续向前。

降位位置之后可以全部取9是本题的关键。 

// 时间复杂度O(n^2),n是n这个数的位数
// 空间复杂度O(n)class Solution {List<Integer> list = new ArrayList<>();public int monotoneIncreasingDigits(int n) {if(judge(n)){return n;}char[] ch = new char[list.size()];boolean flag = true;int back = 9;int len = list.size()-1;// 最后一位肯定是9ch[len--] = '9';// 由于自降一个10位,所以十位上一定需要比先前的十位来的小for(int i=len; i>=0; i--){int num = flag==true? Math.min(list.get(i)-1, back):Math.min(list.get(i), back);if(i>0 && list.get(i-1) <= num){ch[len--] = (char) ('0'+num);back = num;flag = false;}else if(i>0 && list.get(i-1) > num){for(int j=len; j<list.size(); j++)ch[j] = '9';ch[len--] = '9';back = 9;flag = true;}else if(i==0)ch[len--] = (char) ('0'+num);}return Integer.parseInt(new String(ch));}public boolean judge(int n){boolean flag = true;int cur = 0;int back = -1;while(n>=1){if(back == -1){back = n%10;list.add(0, back);n/=10;continue;}cur = n%10;list.add(0, cur);if(cur > back)flag = false;back = cur;n/=10;}return flag;}
}

968.监控二叉树

思路:本题是看了题解写的,这道题很明显可以得到自底向上遍历树来确定什么节点该设置监控。另外确定遍历的方式非常的重要,我初始采用层次遍历的方式确实可以满足测试用例,但是在验证所有测试用例的时候,发现简单的层次遍历规律根本无法满足所有的情况,还是应该自底向上采用深度遍历的方式实现。本题直接自我多多记忆,多多体会。 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
// 时间复杂度O(n),n是节点的个数
// 空间复杂度O(1)class Solution {int  res=0;public int minCameraCover(TreeNode root) {// 对根节点的状态做检验,防止根节点是无覆盖状态 .if(minCame(root)==0){res++;}return res;}/**节点的状态值:0 表示无覆盖1 表示 有摄像头2 表示有覆盖后序遍历,根据左右节点的情况,来判读 自己的状态*/public int minCame(TreeNode root){if(root==null){// 空节点默认为 有覆盖状态,避免在叶子节点上放摄像头return 2;}int left=minCame(root.left);int  right=minCame(root.right);// 左右节点都覆盖了的话, 本节点状态是无覆盖,则位于监控节点父节点的父节点if(left==2 && right==2){//(2,2)return 0;}else if(left==0||right==0){// 左右节点都是无覆盖状态,那 根节点此时应该放一个摄像头// (0,0) (0,1) (0,2) (1,0) (2,0)// 状态值为 1 摄像头数 ++;res++;return 1;}else{// 左右节点的 状态为 (1,1) (1,2) (2,1) 也就是左右节点至少存在 1个摄像头,// 那么本节点就是处于被覆盖状态return 2;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis发布订阅怎么用?

命令 # 订阅频道ch1 subscribe ch1 # 发布频道ch1消息hi publish ch1 hi # 取消订阅 unsubscribe ch1 # 模式订阅。 # ?代表一个占位符、*代表任意占位符、?*代表1个以上占位符 psubscribe c? b* d?*原理 发布订阅的实现其实是通过key为频道value为储存订阅频道客户端的…

硬件在环测试系统-HIL

硬件在环测试系统-HIL 硬件在环-HIL模拟信号类型硬件在环-HIL 硬件在环测试(Hardware in the loop,HIL)是一项被整车厂和ECU供应商公认的嵌入式ECU系统关键测试技术。 除了硬件在环,还有模型在环,软件在环,处理器在环,下表为各在环系统的解释。模型在环主要是验证算法…

Unity之延迟函数

一 什么是延迟函数 延迟函数顾名思义就是会延迟执行的函数&#xff0c;我们可以自己设定延时要执行的函数和具体延时的时间。是MonoBehaviour基类中实现的好方法 二 延迟函数的使用 //1.延迟函数 //Invoke //参数一&#xff1a;函数名 字符串 //参数二&#xff1a;延迟时间 秒…

从0搭建react+ts+redux+axios+antd项目

文章目录 一、安装及初始化二、TypeScript配置三、Webpack配置四、Prettier统一编码风格五、使用less六、Antd 安装及使用七、添加Router及配置八、安装axios九、添加redux及使用 本文介绍了如何用creat-react-app脚手架搭建一个react项目的基本结构&#xff0c;同时配置webpac…

Seq2SeqTrainer与Trainer的区别

Seq2SeqTrainer和Trainer是Hugging Face Transformers库中用于训练模型的两个类。它们之间的主要区别在于它们针对的任务类型和模型架构的不同。 1. 任务类型&#xff1a; - Trainer类适用于大多数常见的单输入单输出&#xff08;single-input, single-output&#xff09;任务…

printf死翘翘

本来想把我的单片机玩一下&#xff0c;寄给在大学搞研究的一个朋友&#xff0c;但竟然挂在printf里面&#xff0c;大概知道是什么位置出问题&#xff0c;但是还想不清楚什么原因。 我先是在stc51单片机里面搞了串口&#xff0c;然后我想用串口重定向到printf做调试&#xff0c;…

ApacheNginx配置ssl证书

一、Apache配置ssl Linux版本&#xff1a;CentOS Linux release 7.9.2009 (Core) Apache版本&#xff1a;Apache/2.4.6 (CentOS) 1、安装Apache&#xff08;使用默认yum源&#xff09; [root10-35-1-25 ~]# yum -y install httpd2、查Apache版本&启动Apache [root10-35-…

【图论】网络流

网络流目前只整理模板&#xff0c;学习的话这篇博客可能不太适合 代码参考下方博客&#xff0c;加了一些自己的注释 算法学习笔记(28): 网络流究级的最大流算法&#xff1a;ISAP与HLPP FF 和 EK 仅用作理解代码&#xff0c;赛时请使用 Dinic 或 ISAP 下文建图方式都基于链式…

面试经典 150 题 -- 滑动窗口 (总结)

面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想&#xff0c;取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动&#xff0c;直到s…

[网络安全 渗透实验 01]基于MSF框架渗透攻击Win7主机系统的设计与实现

基于MSF框架渗透攻击Win7主机系统的设计与实现 文章目录 基于MSF框架渗透攻击Win7主机系统的设计与实现[Warning] 写在前面1. 实验要求2. 实验环境搭建2.1 攻击机&#xff08;Linux kali&#xff09;的下载与安装2.2 靶机&#xff08;Windows 7 Enterprise with Service Pack 1…

iOS图像处理----OpenGL初了解

1&#xff09;什么是渲染上下文&#xff08;Context&#xff09;&#xff1f; OpenGL 自身是一个巨大的状态机&#xff08;State Machine&#xff09;&#xff1a;一系列的变量描述 OpenGL 此刻应当如何运行。OpenGL 的状态通常被称为 OpenGL 上下文&#xff08;Context&#x…

分布式事务(二)—— CAP和Base理论

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 一、CAP理论 cap理论是分布式系统的理论基石 1、Consistency[一致性] 即操作成功并返回客户端后&#xff0c;所有节点在同一时间的数据完全一致&#xff0c;这就是分布式的一致性。一致…

Linux------进程优先级与进程切换

目录 一、进程优先级 二、优先级与权限的区别 三、优先级的查看 四、进程优先级修改 五、进程切换 六、linux2.6内核调度队列与调度原理 一、进程优先级 首先我们得知道一个进程总是需要排队的&#xff0c;他一会在运行队列中排队等待运行&#xff0c;一会在设备的等待队…

点云从入门到精通技术详解100篇-基于三维点云花朵特征提取与分割重建(续)

目录 3 花朵点云坐标转换及花朵特征提取 3.1 圆柱坐标系的建立 3.1.1 旋转平移变换

spring-security 默认登录页面

Spring Security是一个强大且高度可定制的身份验证和访问控制框架。天然与Spring整合&#xff0c;易扩展&#xff0c;引入jar包就可以用了&#xff0c;在boot自动装载下&#xff0c;不需要任何配置就可以控制资源访问。那么默认登录页是如何生产的呢&#xff1f; 版本信息 内…

STM32学习笔记(六) —— 配置系统时钟

1.时钟树 从图中可以看出一共有四个时钟来源&#xff0c;分别是内部高速时钟、内部低速时钟、外部高速时钟接口、外部低速时钟接口&#xff0c;这些时钟源经过内部的倍频分频后提供给各外设使用。其中HSE与LSE需要由外部提供&#xff0c;可以是外部时钟直接输入&#xff0c;也可…

C++——输入输出

C——输入输出 1.输入输出 C 中的输入和输出&#xff08;I/O&#xff09;主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库&#xff0c;它提供了用于输入和输出的基本流类&#xff0c;包括 cin 、 cout 、 cerr 和 clog 。 标准输出流(cout) cout 代表标准…

解决Docker AList本地挂载失效的问题。

解决Docker AList本地挂载失效的问题。 AList Docker version: 3.3 services:alist:image: xhofe/alist:latestcontainer_name: alistvolumes:- ./etc/alist:/opt/alist/data# 比如我要挂载/home,如果在docker里先挂载&#xff0c;是没法办法映射到linux系统下的/home的- /ho…

k8s网络详解(一)

目录 网络概述 Pod 网络通信 Overlay网络 原理 在k8s中的作用 VXLAN 网络插件Flanne Flannel UDP 模式的工作原理 ETCD和Flannel之间的关系 VXLAN 模式 Flannel VXLAN模式跨主机工作原理 网络插件 Calico k8s 组网Calico方案与flannel方案区别 Calico 主要组成部分…

防御保护---防火墙双机热备直路部署(上下三层接口)

防御保护---防火墙双机热备直路部署&#xff08;上下三层接口&#xff09; 一、根据网段划分配置IP地址和安全区域二、配置动态路由OSPF三、配置双机热备四、测试&#xff1a;4.1 测试一&#xff1a;查看状态和路由器路由表&#xff08;双机热备&#xff09;前后对比4.2 测试二…