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

leecode654——最大二叉树

leecode最大二叉树

🌻题目要求:

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。

🌻思路一:递归

🌻思路二: 单调栈

使用递归虽然每次对数组进行了拆分,但是会对数组中的元素也进行多次遍历,那么会不会有一种方式,可以仅通过一次遍历就可以得出最终结果。
单调栈的思路:

🔵(1)如果栈顶元素大于待插入的元素,那么直接入栈;
🔵(2)如果栈顶元素小于待插入的元素,那么栈顶元素出栈

在对比节点的同时,也要进行二叉树得到构造,即:

🔵(1)如果栈顶元素大于待插入的元素,则栈顶元素.right=待插入元素
🔵(2) 如果栈顶元素小于待插入的元素,则待插入元素.left=栈顶元素。

图来自:leecode大佬思路

🌻 以nums=[3,2,1,6,0,5]为例,看单调栈如何创建二叉树。

🌿首先,对于数组前3个元素,满足Node(3)>Node(2)>Node(1),所以3个元素直接入栈,并且构造二叉树Node(3).right=Node(2),Node(2).right=Node(1)

在这里插入图片描述

🌿当遍历到Node(6)时,由于Node(1)<Node(6),所以Node(1)出栈,并且执行Node(6).left=Node(1),又由于Node(2)<Node(6),所以Node(2)也出栈,并且执行Node(6).left=Node(2),
🔔注意:此时Node(6)的左节点从Node(1)变成了Node(2),由于Node(3)<Node(6),所以Node(6).left=Node(3),注意:此时Node(6)的左节点从Node(2)变成了Node(3),由于栈中没有元素可以出栈 了,没有可以和Node(6)对比的元素了,因此Node(6)入栈。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🌿我们继续遍历到Node(0),由于Node(0)小于栈顶元素Node(6),所以Node(0)直接入栈就可以了。但是,别忘记维护一下二叉树,也就是说,配置一下Node(6).right = Node(0)。具体操作,如下图所示:

在这里插入图片描述

🌿最后,我们遍历到了Node(5),由于Node(5)大于当前栈顶元素Node(0),所以Node(0)执行出栈操作,并维护二叉树结构Node(5).left = Node(0);在对比Node(5)小于当前栈顶元素Node(6),所以,Node(5)直接入栈即可。维护二叉树结构Node(6).right = Node(5)。具体操作,如下图所示:

在这里插入图片描述
在这里插入图片描述

🌻代码如下:

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {Deque<TreeNode> q=new ArrayDeque<>();for(int i=0;i<nums.length;i++){TreeNode node=new TreeNode(nums[i]);while(!q.isEmpty()){TreeNode topNode=q.peekLast();if(topNode.val>node.val){q.addLast(node);topNode.right=node;break;}else{q.removeLast();node.left=topNode;}}if(q.isEmpty()){q.addLast(node);}}return q.peek();}
}

🌻补充:

1.单调栈

🟢单调栈是一种特殊的栈数据结构,它的特点是栈内的元素保持单调递增或单调递减的顺序。具体来说,单调栈可以分为单调递增栈和单调递减栈两种类型。

在使用单调栈时,通常需要解决与元素的大小关系相关的问题,例如找到数组中元素的下一个更大元素、下一个更小元素等。单调栈提供了一种高效的方法来解决这些问题。

🟢单调递增栈的特点是栈内的元素从栈底到栈顶保持递增的顺序,而单调递减栈则是栈内的元素从栈底到栈顶保持递减的顺序。
🟢使用单调栈的好处包括:

快速找到某个元素的下一个更大或更小元素。通过保持栈内元素的单调性,可以在 O(1) 的时间复杂度内找到下一个更大或更小的元素,而无需遍历整个数组或其他数据结构。
节省空间和时间复杂度。相比其他数据结构,单调栈通常可以以更少的空间和更低的时间复杂度来解决一些特定的问题。解决一些特定的问题。单调栈常用于解决与元素大小相关的问题,如找到数组中元素的下一个更大元素、下一个更小元素,或者计算数组中每个元素的距离最近的更大或更小元素等。

2.单调栈和普通栈的区别

🟢 单调性要求:

单调栈要求栈内的元素保持单调递增或单调递减的顺序,而普通栈没有这个要求,可以存储任意顺序的元素。

🟢入栈规则:

单调栈的入栈规则与普通栈相同,即将元素压入栈顶。但是,单调栈在入栈时需要根据单调性进行调整。对于单调递增栈,当有新的元素要入栈时,需要将栈内比该元素小的元素全部出栈;对于单调递减栈,则是将栈内比该元素大的元素全部出栈。

🟢出栈规则:

单调栈的出栈规则与普通栈相同,即将栈顶元素弹出。在单调栈中,出栈操作通常与寻找下一个更大或更小元素有关,具体出栈规则会根据问题的需求而定。

🟢使用场景:

普通栈可以用于存储和操作任意类型的数据,适用于一般的栈操作。而单调栈主要应用于一些特定问题,例如找到数组中元素的下一个更大或更小元素、计算数组中每个元素的距离最近的更大或更小元素等,这些问题与元素的大小关系有关,而单调栈提供了一种高效的解决方法。

相关文章:

leecode654——最大二叉树

leecode最大二叉树 &#x1f33b;题目要求&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的…...

【笔试强训选择题】Day12.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…...

边缘计算与开放源代码的完美结合

随着人工智能、大数据和物联网等技术的快速发展&#xff0c;边缘计算已经成为一种普遍使用的计算方式&#xff0c;尤其是在物联网领域。与此同时&#xff0c;越来越多的开放源代码项目也在不断涌现&#xff0c;这些项目为边缘计算提供了更多的选择和灵活性。那么&#xff0c;边…...

边缘计算网关在储能系统中的应用——提高储能系统的安全性和稳定性

随着全球能源消耗和环境保护意识的不断提高&#xff0c;储能技术逐渐成为了各国电力系统中的重要一环。而作为储能技术中的关键设备之一&#xff0c;边缘计算网关在储能系统中的应用也越来越受到关注。本文将从边缘计算网关的定义、特点以及其在储能行业中的应用三个方面来介绍…...

【FMC136】AD9467之4通道 250MSPS 采样率16位AD 采集子卡模块得设计原理图中文资料

板卡概述 FMC136 是一款4 通道250MHz 采样率16 位AD 采集FMC子卡&#xff0c;符合VITA57 规范&#xff0c;可以作为一个理想的IO 模块耦合至FPGA前端&#xff0c;4 通道AD 通过高带宽的FMC 连接器&#xff08;HPC&#xff09;连接至FPGA 从 而大大降低了系统信号延迟。该板卡支…...

抖音SEO矩阵系统源码开发(一)

抖音seo矩阵营销系统/抖音SEO矩阵号管理系统/抖音霸屏源码开发搭建&#xff0c;抖音官方团队大力推广抖音SEO生态&#xff0c;我们应如何布局开发抖音SEO矩阵系统&#xff0c;来达到账号排名优化的效果&#xff0c;很显然&#xff0c;账号关键词起到了很关键的作用。首先&#…...

Mysql实现对某一字段排序并将排名写入另一字段

文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名 总结 前言 最近业务上碰到这样一个需求&#xff0c;需要对表按照某一个字段进行排序&#xff0c;并且将得到的排名写入对应的排名字段。这个需求于我而言确实没有遇到过&#xff0c;好…...

vector容器 [上]

目录 一、 对于vector的介绍 二、vector的定义 0x01 无参构造 0x02 构造并初始化n个val 0x03 使用迭代器进行初始化构造 0x04 拷贝构造 0x05 比较 三、 vector的遍历 0x01 push_back() 0x02 operator[] 和at() 0x03 遍历 四、vector 容量空间 0x01 max_size : 返回v…...

React Native技术探究:开发高质量的跨平台移动应用的秘诀

作为一个跨平台移动应用开发框架&#xff0c;React Native在开发过程中能够有效提高开发效率、降低开发成本、缩短上线时间&#xff0c;因此备受开发者的欢迎。然而&#xff0c;如何使用React Native开发出高质量的跨平台移动应用呢&#xff1f;本文将探究这个问题&#xff0c;…...

C语言函数大全-- w 开头的函数(2)

C语言函数大全 本篇介绍C语言函数大全-- w 开头的函数 1. wcstok 1.1 函数说明 函数声明函数功能wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr);用于将一个长字符串拆分成几个短字符串&#xff08;标记&#xff09;&#xff0c;并返回第一个标记的地…...

kafka启动创建topic报错:zookeeper is not a recognized option

当前使用版本&#xff1a;kafka_2.13-3.4.0 使用老版本的创建topic的命令&#xff0c;是用zookeeper来创建&#xff0c;但是报错如下 D:\Software\Doument\kafka_2.13-3.4.0> .\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 …...

11个超好用的SVG编辑工具

SVG的优势在于SVG图像可以更加灵活&#xff0c;自由收缩放大而不影响图片的质量&#xff0c;一个合适的SVG编辑工具能够让你的设计事半功倍&#xff0c;下面就一起来看看这些冷门软件好用在哪里。这11个超好用的SVG编辑工具依次为&#xff1a;即时设计、Justinmind、Sketsa SVG…...

低代码平台:10分钟从入门到原理

导航目录 一、低代码概念 二、优势及局限 三、基础功能及搭建 1、业务流程 2、用户权限 3、统计图表 四、使用感受 五、总结 传统的软件研发方式目前并不能很好地满足企业的需求&#xff1a;人员成本高、研发时间长、运维复杂。这时低代码工具的出现为快速开发软件提供…...

【JavaScript】如何获取客户端IP地址?

使用这个库&#xff1a;request-ip 它按照如下顺序获取请求的IP地址&#xff1a; X-Client-IPX-Forwarded-For (Header may return multiple IP addresses in the format: “client IP, proxy 1 IP, proxy 2 IP”, so we take the first one.)CF-Connecting-IP (Cloudflare)F…...

数据科学中使用的17 种相似性和相异性度量之欧氏距离

目录 1简介 2距离函数 2.1 L2范数&#xff08;欧氏距离&#xff09; 1简介 在数据科学中&#xff0c;相似性度量是一种衡量数据样本如何相互关联或相互接近的方法。另一方面&#xff0c;相异性度量是告诉数据对象有多少是不同的。此外&#xff0c;当相似的数据样本被分组到一…...

朋友去华为面试,轻松拿到30K的Offer,羡慕了......

最近有朋友去华为面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…...

MySQL入门第五课:数据更新

数据更新 1 插入 插入表数据 insert into 表名 (字段列表) values(值列表) insert into 表名 set 字段名1 值1,字段名2值2 插入多个数据 insert into 表名 values(值1&#xff0c;值2&#xff0c;值3.....&#xff09; 这里面的值与列索引是对应的 显示表数据 select * fr…...

ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析

你好&#xff01;这里是风筝的博客&#xff0c; 欢迎和我一起交流。 很久没写kernel相关的东西了&#xff0c;主要是来到手机厂之后&#xff0c;大部分还是在Android上&#xff0c;Kernel虽然也有涉及&#xff0c;但毕竟只是有所涉及&#xff0c;主要业务逻辑还是在HAL之上&am…...

[230513] TPO72 | 2022年托福阅读真题第1/36篇 | 10:45

Invading Algae 目录 Invading Algae 全文 题目 Paragraph 1 P1 段落大意 问题1 Paragraph 2 P2 段落大意 问题2 *问题3* Paragraph 3 P3 段落大意 问题4 Paragraph 4 P4 段落大意 Paragraph 5 P5 段落大意 *问题5* *问题6* 问题7 问题8 问题9…...

操作符详解

目录 操作符分类 算术操作符 - * / % 二进制 二进制总结 移位操作符&#xff08;操作数只能为整数&#xff09; << >> 位操作符&#xff08;操作数必须为整数&#xff09; & | ^ 面试题 赋值操作符 复合赋值符 单目操作符 单目操作符介绍…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...