LeetCode 255. 验证前序遍历序列二叉搜索树(单调栈)*

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 递归超时解
      • 2.2 单调栈

1. 题目

给定一个整数数组,你需要验证它是否是一个二叉搜索树正确的先序遍历序列。

你可以假定该序列中的数都是不相同的。

参考以下这颗二叉搜索树:5/ \2   6/ \1   3
示例 1:
输入: [5,2,6,1,3]
输出: false示例 2:
输入: [5,2,1,3,6]
输出: true进阶挑战:
您能否使用恒定的空间复杂度来完成此题?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/verify-preorder-sequence-in-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 递归超时解

  • 检查左边小于root,右边是否都大于root,时间复杂度O(n2)
class Solution {
public:bool verifyPreorder(vector<int>& preorder) {if(preorder.size() <= 2) return true;return check(preorder, preorder[0], 1, preorder.size()-1);}bool check(vector<int>& arr, int root, int l, int r){if(l>=r) return true;int split = l, i;while(split <= r && arr[split] < root)split++;//左边部分比我root小i = split;for(i = split; i <= r; ++i)if(arr[i] < root)//右边部分因该都比我大,此处复杂度较高return false;return check(arr, arr[l], l+1, split-1) && (split > r ||check(arr, arr[split], split+1, r));}
};

2.2 单调栈

在这里插入图片描述

class Solution {map<int,int> m;
public:bool verifyPreorder(vector<int>& preorder) {if(preorder.size() <= 2) return true;int MIN = INT_MIN;stack<int> s;for(int i = 0; i < preorder.size(); ++i){if(preorder[i] < MIN)return false;while(!s.empty() && s.top() < preorder[i])//遇到大的了,右分支{MIN = s.top();//记录弹栈的栈顶为最小值s.pop();}s.push(preorder[i]);}return true;}
};

100 ms 21.5 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 259. 较小的三数之和(固定一点,内层双指针)

文章目录1. 题目2. 解题1. 题目 给定一个长度为 n 的整数数组和一个目标值 target&#xff0c;寻找能够使条件 nums[i] nums[j] nums[k] < target 成立的三元组 i, j, k 个数&#xff08;0 < i < j < k < n&#xff09;。 示例&#xff1a; 输入: nums [-2…

linux虚拟中断virq,一种微内核操作系统的分区多核方法与流程

本发明涉及一种计算机领域&#xff0c;特别涉及一种微内核操作系统的分区多核方法。背景技术&#xff1a;在宏内核操作系统(如Linux&#xff0c;Windows)中,网络、文件系统、设备驱动等大量系统服务都在操作系统内核中&#xff0c;微内核操作系统与宏内核操作系统相反&#xff…

LeetCode 487. 最大连续1的个数 II(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定一个二进制数组&#xff0c;你可以最多将 1 个 0 翻转为 1&#xff0c;找出其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;[1,0,1,1,0] 输出&#xff1a;4 解释&#xff1a;翻转第一个 0 可以得到最长的连续 1。当翻转以后…

行向量,列向量,行主序矩阵,列主序矩阵

原理: PS: 很不喜欢OGL的列矩阵方式&#xff0c;不过本质上是一样的。 v2 v1 * ma * mb;        (dx) v2 mb(T) * ma(T) * v1     (ogl) 关于这个话题&#xff0c;网上有n多个版本&#xff0c;今天&#xff0c;我也来说说这个话题。&#xff08;一&#xff09;…

LeetCode 1429. 第一个唯一数字(map+queue)

文章目录1. 题目2. 解题1. 题目 给定一系列整数&#xff0c;插入一个队列中&#xff0c;找出队列中第一个唯一整数。 实现 FirstUnique 类&#xff1a; FirstUnique(int[] nums) 用数组里的数字初始化队列。int showFirstUnique() 返回队列中的 第一个唯一 整数的值。如果没…

LeetCode 1244. 力扣排行榜(map+multiset)

文章目录1. 题目2. 解题1. 题目 新一轮的「力扣杯」编程大赛即将启动&#xff0c;为了动态显示参赛者的得分数据&#xff0c;需要设计一个排行榜 Leaderboard。 请你帮忙来设计这个 Leaderboard 类&#xff0c;使得它有如下 3 个函数&#xff1a; addScore(playerId, score)…

c语言实现ftp网络应用程序,使用C语言socket实现windows pc与ftp服务器通信---socket实现ftp客户端...

code// Client.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #pragma comment(lib,"WS2_32.lib")using namespace std;#define PORT 21//FTP端口#define IP_ADDR "x.x.x.x"//主机地址int getPortNum(cha…

LeetCode 562. 矩阵中最长的连续1线段(DP)

文章目录1. 题目2. 解题1. 题目 给定一个01矩阵 M&#xff0c;找到矩阵中最长的连续1线段。 这条线段可以是水平的、垂直的、对角线的或者反对角线的。 示例: 输入: [[0,1,1,0],[0,1,1,0],[0,0,0,1]] 输出: 3 提示: 给定矩阵中的元素数量不会超过 10,000。来源&#xff1a;力…

LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给出一个二进制数组 data&#xff0c;你需要通过交换位置&#xff0c;将数组中 任何位置 上的 1 组合到一起&#xff0c;并返回所有可能中所需 最少的交换次数。 示例 1&#xff1a; 输入&#xff1a;[1,0,1,0,1] 输出&#xff1a;1 解释&#…

LeetCode 742. 二叉树最近的叶节点(建立父节点信息+BFS)

文章目录1. 题目2. 解题1. 题目 给定一个 每个结点的值互不相同 的二叉树&#xff0c;和一个目标值 k&#xff0c;找出树中与目标值 k 最近的叶结点。 这里&#xff0c;与叶结点 最近 表示在二叉树中到达该叶节点需要行进的边数与到达其它叶结点相比最少。 而且&#xff0c;当…

LeetCode 490. 迷宫(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 由空地和墙组成的迷宫中有一个球。 球可以向上下左右四个方向滚动&#xff0c;但在遇到墙壁前不会停止滚动。 当球停下时&#xff0c;可以选择下一个方向。 给定球的起始位置&#xff0c;目的地和迷宫&#xff0c;判断球能否在目…

LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)

文章目录1. 题目2. 解题2.1 BFS2.2 Dijkstra 最短路径1. 题目 由空地和墙组成的迷宫中有一个球。 球可以向上下左右四个方向滚动&#xff0c;但在遇到墙壁前不会停止滚动。 当球停下时&#xff0c;可以选择下一个方向。 给定球的起始位置&#xff0c;目的地和迷宫&#xff0c…

红米note3android版本,小米-红米note3-LOS-安卓9.0.0-稳定版Stable3.0-来去电归属-农历等-本地化增强适配...

制作者&#xff1a;MOS-Developer基于版本&#xff1a;LineageOS Android最新安卓9.0.0代码适合机型&#xff1a;小米红米note3高配/标配/低配/kenzo注意事项&#xff1a;为了能一直更新和维护&#xff0c;不付费不收费&#xff0c;请把预装的4个软件使用3-5天后再卸载&#xf…

LeetCode 305. 岛屿数量 II(并查集)

文章目录1. 题目2. 解题2.1 超时解2.1 改进计算方法1. 题目 假设你设计一个游戏&#xff0c;用一个 m 行 n 列的 2D 网格来存储你的游戏地图。 起始的时候&#xff0c;每个格子的地形都被默认标记为「水」。 我们可以通过使用 addLand 进行操作&#xff0c;将位置 (row, col)…

LeetCode 265. 粉刷房子 II(DP)

文章目录1. 题目2. 解题1. 题目 假如有一排房子&#xff0c;共 n 个&#xff0c;每个房子可以被粉刷成 k 种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然&#xff0c;因为市场上不同颜色油漆的价格不同&#xff0c;所以房子粉刷成…

鸿蒙系统笔记本价格,鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点...

原标题&#xff1a;鸿蒙系统手机华为P50将明年3月发售&#xff0c;华为P40价格骤降至冰点鸿蒙系统手机华为P50将明年3月发售&#xff0c;华为P40价格骤降至冰点&#xff01;每一代P系列产品都基于华为研发和业界合作伙伴的最前沿的能力&#xff0c;实现全新的突破&#xff0c;明…

LeetCode 272. 最接近的二叉搜索树值 II(栈+优先队列)

文章目录1. 题目2. 解题1. 题目 给定一个不为空的二叉搜索树和一个目标值 target&#xff0c;请在该二叉搜索树中找到最接近目标值 target 的 k 个值。 注意&#xff1a; 给定的目标值 target 是一个浮点数 你可以默认 k 值永远是有效的&#xff0c;即 k ≤ 总结点数 题目保证…

LeetCode 750. 角矩形的数量(DP)

文章目录1. 题目2. 解题1. 题目 给定一个只包含 0 和 1 的网格&#xff0c;找出其中角矩形的数量。 一个「角矩形」是由四个不同的在网格上的 1 形成的轴对称的矩形。 注意只有4角的位置才需要为 1。并且&#xff0c;4 个 1 需要是不同的。 示例 1&#xff1a; 输入&#xf…

LeetCode 267. 回文排列 II(回溯)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s &#xff0c;返回其通过重新排列组合后所有可能的回文字符串&#xff0c;并去除重复的组合。 如不能形成任何回文排列时&#xff0c;则返回一个空列表。 示例 1&#xff1a; 输入: "aabb" 输出: ["abba"…

html canvas直线进度条,js+HTML5 canvas 实现简单的加载条(进度条)功能示例

本文实例讲述了jsHTML5 canvas 实现简单的加载条(进度条)功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;www.jb51.net canvas实现加载条动画/** 获取canvas, canvas本身没有画图能力&#xff0c;相当于一个画布&#xff0c;提供绘制图形的地方* document.getElem…