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

秋招算法备战第37天 | 738.单调递增的数字、968.监控二叉树、贪心算法总结

738. 单调递增的数字 - 力扣(LeetCode)

这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。

我们可以将数字n转换为字符数组,然后从左到右扫描,寻找第一个违反单调递增条件的位置。一旦找到这样的位置,我们将该位置上的数字减一,并将其右侧的所有数字设置为9,以使得整个数字尽可能大。

然而,这个策略可能会导致左侧的一些数字违反单调递增的条件,因此我们需要从违反位置开始向左扫描,以确保整个数字仍然是单调递增的。

以下是解决问题的Python代码:

def monotoneIncreasingDigits(n: int) -> int:digits = list(str(n))n = len(digits)pos = n  # 用来记录第一个违反单调递增条件的位置# 扫描从左到右找到第一个违反单调递增条件的位置for i in range(n - 1, 0, -1):if digits[i] < digits[i - 1]:pos = idigits[i - 1] = str(int(digits[i - 1]) - 1)# 将pos右侧的所有数字设置为9for i in range(pos, n):digits[i] = '9'return int(''.join(digits))

我们可以用给定的示例来测试这个函数:

print(monotoneIncreasingDigits(10))  # 输出: 9
print(monotoneIncreasingDigits(1234))  # 输出: 1234
print(monotoneIncreasingDigits(332))  # 输出: 299

注:这题的关键还是通过样例观察规律,找到贪心的解法

968. 监控二叉树 - 力扣(LeetCode)

使用贪心算法来解决此问题的关键思想是自底向上遍历二叉树,并尽可能地在没有摄像头的父节点上放置摄像头。以下是具体步骤和实现:

  1. 我们可以自底向上遍历二叉树,使用后序遍历。
  2. 为了记录每个节点的状态,我们可以使用三个常量表示:0表示未监视,1表示有摄像头,2表示被监视。
  3. 如果任何子节点未监视,则在当前节点放置摄像头。
  4. 如果任何子节点有摄像头,则当前节点被监视。
  5. 如果所有子节点都被监视,则当前节点未监视。
  6. 我们需要确保根节点被监视,所以如果根节点未监视,则增加一个摄像头。

以下是Python代码实现:

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef minCameraCover(root: TreeNode) -> int:NOT_MONITORED, MONITORED_WITHOUT_CAM, MONITORED_WITH_CAM = 0, 1, 2cameras = 0# 后序遍历函数def dfs(node):nonlocal camerasif not node:return MONITORED_WITHOUT_CAMleft = dfs(node.left)right = dfs(node.right)if left == NOT_MONITORED or right == NOT_MONITORED:cameras += 1return MONITORED_WITH_CAMif left == MONITORED_WITH_CAM or right == MONITORED_WITH_CAM:return MONITORED_WITHOUT_CAMreturn NOT_MONITORED# 如果根节点未监视,则增加一个摄像头if dfs(root) == NOT_MONITORED:cameras += 1return cameras

可以使用上面给出的示例来测试该函数,结果应与之前相同。这种贪心策略确保了在满足所有约束的情况下使用的摄像头数量最少。

贪心算法总结

如果找出局部最优并可以推出全局最优,就是贪心,如果局部最优都没找出来,就不是贪心,可能是单纯的模拟。

在做贪心题的过程中,如果再来一个数据证明,其实没有必要,手动模拟一下,如果找不出反例,就试试贪心。面试中,代码写出来跑过测试用例即可,或者自己能自圆其说理由就行了

星友总结的思维导图如下在这里插入图片描述

相关文章:

秋招算法备战第37天 | 738.单调递增的数字、968.监控二叉树、贪心算法总结

738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。 我们可以将数字n转换为字符数组&#xff0c;然后从左到右扫描&#xff0c;寻找第一个违反单调递增条件的位置。一旦找到这样的位置&#xff0c;…...

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、Node中node_modules文件夹及package.json文件的作用说明二、VUE3项目打包三、Windows Server上的Nginx部署 一、Node中node_modules文件夹及package.json文件的作用说明 node_modules是安装node后用来存放用包管理工具下载安装的包的…...

计算机视觉与图形学-神经渲染专题-pi-GAN and CIPS-3D

《pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis》 摘要 我们见证了3D感知图像合成的快速进展&#xff0c;利用了生成视觉模型和神经渲染的最新进展。然而&#xff0c;现有的方法在两方面存在不足&#xff1a;首先&#xff0c;它们…...

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;它可以支持国标协议的设备接入&#xff0c;在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能&#xff0c;既能作为业务平台使用&#xff0c;也能作为能力层平台调用。 我…...

G1和CMS

G1垃圾回收器要点&#xff1a; 1.什么是G1垃圾回收器&#xff1a; G1是一款专门针对于拥有多核处理器和大内存的机器的收集器&#xff0c;在满足了GC响应时间的延迟可控的情况下&#xff0c;也会尽可能提高的程序的吞吐量 2.G1垃圾回收器的优点&#xff1a; ①与CMS收集器一…...

详解Linux中的socket函数

2023年8月3日&#xff0c;周四下午 目录 函数原型参数domain参数type参数protocol举例说明参数type和参数protocol之间的关系 函数原型 #include <sys/socket.h>int socket(int domain, int type, int protocol);参数domain domain是“域”的意思&#xff0c;其值为AF…...

React Antd 实现表格合计功能

思路&#xff1a;首先拿到 表格数组对象&#xff0c;然后写一个工具类&#xff0c;然后向数组对象最后插入一条数据&#xff0c;这条数据的字段时根据表格数组里合计算出来的。 代码如下&#xff0c;需根据各自业务稍作改动&#xff1a; <Table dataSource{tableData}column…...

尝试一下Guava带返回值的多线程处理类ListenableFuture

文章目录 ListenableFuture&#xff0c;带返回值的Guava多线程处理工具类举个例子扩展阅读 最近在学习&#xff0c;Java实现异步编程的8种方式这篇博客的时候&#xff0c;没有找到比较好的一个学习demo&#xff0c;故在此整理一下。 ListenableFuture&#xff0c;带返回值的Gua…...

微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID

微信小程序真机调试报ERR_CERT_AUTHORITY_INVALID 问题解决方法 问题 微信开发者工具中调试微信小程序&#xff0c;在开发工具里面调试没问题&#xff0c;但是真机调试的时候报ERR_CERT_AUTHORITY_INVALID错误 解决方法 到这个站点检查域名的Https证书的安全性 : 传送门(注:…...

JCommander + AutoService打造带子命令的Java命令行应用

文章目录 需求Java命令行工具库依赖库定义各个子命令主类CLI测试一下参考文档 需求 最近想将自己的一个Java应用包装成命令行工具&#xff0c;看了几个库&#xff0c;最后选取了JCommander&#xff0c;结合AutoService库&#xff0c;实现了带子命令的工具&#xff0c;方便扩展…...

pycharm运行pytest无法实时输出信息

需要去掉控制台输出。根据查询相关信息显示pycharm运行pytest无法实时输出信息&#xff0c;需要去掉pycharm里面的运行模式&#xff0c;点击减号&#xff0c;再点击加号&#xff0c;添加python执行文件即可实时输出信息。 问题描述&#xff1a; 使用pycharm运行代码时&#x…...

Mac 卸载 IntelliJ IDEA 方法

Mac 系统下 IDEA 没有一键卸载程序&#xff0c;也没有完全卸载的插件&#xff0c;若要彻底删除&#xff0c;除了在应用&#xff08;Application&#xff09;里删除 IDEA 到垃圾桶外&#xff0c;还需要在终端&#xff08;Terminal&#xff09;执行删除相应的文件及文件夹。 1 分…...

数据安全能力框架模型-详细解读(三)

数据安全能力框架内涵 “奇安信数据安全能力框架”体现了数据安全治理从组织机构安全治理&#xff0c;到数字化环境具体管控、分析能力分层逐步落实的工程方法。 它以企业数据安全的战略目标和风险容忍度为输入&#xff0c;明确数据安全治理的组织&#xff1b;以合规与治理需…...

vscode启动leiningen项目

要在 VS Code 中启动 Leiningen 项目&#xff0c;你可以按照以下步骤进行操作&#xff1a; 确保已经安装了 Leiningen。你可以在终端中输入 lein version 来检查是否已成功安装。 在 VS Code 中安装 Leiningen 扩展。打开 VS Code&#xff0c;点击左侧的扩展图标&#xff08;四…...

Qt事件的传递顺序

事件的传递顺序 事件的传递顺序是这样的&#xff1a;先是事件过滤器&#xff0c;然后是该部件的event()函数&#xff0c;最后是该部件的事件处理函数。这里还要注意&#xff0c;event()函数和事件处理函数&#xff0c;是在该部件内进行重新定义的&#xff0c;而事件过滤器却是…...

基于facenet+faiss开发构建人脸识别系统

facenet是一款非常经典的神经网络模型&#xff0c;它可以直接学习从人脸图像到欧几里德空间的映射(直接将人脸映射到欧几里得空间)。在欧几里德空间中&#xff0c;距离直接对应于人脸相似性的度量。一旦这个空间产生&#xff0c;使用标准技术&#xff0c;将FaceNet嵌入作为特征…...

数据分析的心脏:获取数据的好工具

打开网站&#xff1a;Scrape and Monitor Data from Any Website with No Code 新建机器人&#xff1a; 选择类型&#xff1a; 填写目标网站网址&#xff1a; 输入网址&#xff1a;https://cn.wsj.com/zh-hans/news/technology 第一次录制需要安装chrome插件&#xff1a; 并设置…...

【万字长文】SpringBoot整合Atomikos实现多数据源分布式事务(提供Gitee源码)

前言&#xff1a;在最近的实际开发的过程中&#xff0c;遇到了在多数据源的情况下要保证原子性的问题&#xff0c;这个问题当时遇到了也是思考了一段时间&#xff0c;后来通过搜集大量资料与学习&#xff0c;最后是采用了分布式事务来解决这个问题&#xff0c;在讲解之前&#…...

js中什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?

目录 目录 目录 参考资料 必看强烈建议十分钟看完视频 &#xff0c;即可学会 必看参考详解宏任务微任务 参考资料 1 宏任务与微任务_哔哩哔哩_bilibili 什么是宏任务、微任务&#xff1f;宏任务、微任务有哪些&#xff1f;又是怎么执行的&#xff1f;_什么是宏任务和微任…...

Word中如何断开表格中线段

Word中如何断开表格中线段_word表格断线怎么弄_仰望星空_LiDAR的博客-CSDN博客有时候为了美观&#xff0c;需要实现如下的效果&#xff0c;即第2条线段被断开成3段步骤如下&#xff1a;选中需要断开的格网&#xff0c;如下&#xff0c;再选择段落、针对下框标即可。_word表格断…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...