(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

news/2025/1/7 20:12:23/

❓ 剑指 Offer 31. 栈的压入、弹出序列

难度:中等

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示

  • 0 < = p u s h e d . l e n g t h = = p o p p e d . l e n g t h < = 1000 0 <= pushed.length == popped.length <= 1000 0<=pushed.length==popped.length<=1000
  • 0 < = p u s h e d [ i ] , p o p p e d [ i ] < 1000 0 <= pushed[i], popped[i] < 1000 0<=pushed[i],popped[i]<1000
  • pushedpopped 的排列。

注意:本题 946. 验证栈序列 相同!

💡思路:栈模拟

使用一个栈 temp 来模拟压入弹出操作。

  • 每次入栈一个元素后,都要判断一下栈顶元素是不是当前出栈序列 popped 的第一个元素
    • 如果是的话则执行出栈操作并将 popped 往后移一位,继续进行判断。

遍历数组 pushed 结束之后,每个元素都按照数组 pushed 的顺序入栈一次。如果栈为空,则每个元素都按照数组 popped 的顺序出栈,返回 true。如果栈不为空,则元素不能按照数组 popped 的顺序出栈,返回 false

🍁代码:(C++、Java)

C++

class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {int n = pushed.size();stack<int> temp;for(int pushIndex = 0, popIndex = 0; pushIndex < n; pushIndex++){temp.push(pushed[pushIndex]);while(!temp.empty() && temp.top() == popped[popIndex]){temp.pop();popIndex++;}}return temp.empty();}
};

Java

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {int n = pushed.length;Stack<Integer> temp = new Stack<>();for(int pushIndex = 0, popIndex = 0; pushIndex < n; pushIndex++){temp.push(pushed[pushIndex]);while(!temp.isEmpty() && temp.peek() == popped[popIndex]){temp.pop();popIndex++;}}return temp.isEmpty();}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组 pushedpopped 的长度。需要遍历数组 pushedpopped 各一次,判断两个数组是否为有效的栈操作序列。
  • 空间复杂度 O ( n ) O(n) O(n),空间复杂度主要取决于栈空间,栈内元素个数不超过 n

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


http://www.ppmy.cn/news/951224.html

相关文章

AI百晓生chatGPT绘画漫画头像年龄穿梭人工智能源码

源码功能&#xff1a;达人入驻联盟分红版 GPT 绘画 漫画头像 年龄变化 人像视频卡通化 视频换脸 人像素描 活照片 人脸比对 性别互换专 为运营而生的程序 【运营核心&#xff1a;ai能力 达人入驻联盟 多端共行 支付与流量主双模式 定时自动结算】 主要有以下几大特点; …

【openai 绘画 对接】chatgpt绘画

public function ai_draw_image($item []){if ($item) {$type_info ChatDrawType::where([id > $item[style_id]])->find();$prompt $type_info[title] . $type_info[memo] . : . $item[title]; //重点 开始$params [size > $item[size], prompt > $prompt];$…

用ChatGPT优化AI绘画提示词的探索

注&#xff1a;本文中的AI绘画模型为Stable Diffusion 2.0&#xff0c;平台工具采用白海科技涌现AIGC引擎. 用ChatGPT优化AI绘画提示词的探索 这是一篇关于如何使用ChatGPT优化文生图提示词的简短经验说明。 自ChatGPT发布以来&#xff0c;大家已经探索了ChatGPT的各种各样的使…

【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

文章目录 Walking Robot Simulation 模拟行走机器人问题描述&#xff1a;分析代码哈希 Tag Walking Robot Simulation 模拟行走机器人 问题描述&#xff1a; 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以…

k8s1.18.20通过cert-manager、kubed实现三个月免费证书自动续签

k8s1.18.20通过cert-manager、kubed实现三个月免费证书自动续签 一、cert-manager部署 参考:k8s1.18.20:cert-manager 1.8 安装部署 二、申请免费证书-letsencrypt 2.1、创建ClusterIssuer 向letsencrypt申请三个月免费证书 [root@k8s-node ~]# cat clusterissuer-prod.…

怎么使用ChatGPT 和 Midjourney 绘画,让ChatGPT教你绘画

最近一直在探索如何让ChatGpt来写绘画的关键词&#xff0c;把ChatGpt给的答案直接出图都相当不错。 那如何让ChatGpt辅助力AI绘画呢&#xff1f; 一、给主题让ChatGPT描述 上面给了一个简易主题演示一下&#xff0c;这是完全我没有细化的提问&#xff0c;然后把直接把这些关键…

教ChatGPT学会看图的方法来了

羿阁 发自 凹非寺量子位 | 公众号 QbitAI 2022年流行“文生图”模型&#xff0c;那2023年流行什么&#xff1f; 机器学习工程师Daniel Bourke的答案是&#xff1a;反过来&#xff01; 这不&#xff0c;一个最新发布的“图生文”模型在网上爆火&#xff0c;其优秀的效果引发众多…

无聊写个 chatgpt 玩玩!这不得试一试 openai 的聊天和绘画功能

chatgpt 最近很火。使用 chatgpt 问一些问题还是很有用的。比如面试题&#xff0c;面试题的答案。简直不要太爽。 不过闲来无事&#xff0c;也使用 openai 提供的api &#xff0c;写了几个小页面&#xff0c;可以进行聊天&#xff0c;和绘画。 项目放在 github 上了&#xff…