【剑指offer】面试题31:栈的压入、弹出序列(Java)
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed 是 popped 的排列。
代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
if(pushed.length==0&&popped.length==0)
{
return true;
}
if(pushed.length!=popped.length)
{
return false;
}
Stack<Integer> stack = new Stack<Integer>();
int i=0,j=0;
while(i<pushed.length)
{
if(stack.isEmpty())
{
stack.push(pushed[i++]);
}
if(stack.peek()==popped[j])
{
stack.pop();
j++;
}
else
{
if(i>0&&popped[j]==pushed[i-1])
{
j++;
stack.pop();
}
else if(i<=pushed.length-1)
{
stack.push(pushed[i++]);
}
else
{
return false;
}
}
}
while(j<popped.length)
{
if(popped[j]==stack.peek())
{
j++;
stack.pop();
}
else{
return false;
}
}
return true;
}
}
【剑指offer】面试题31:栈的压入、弹出序列(Java)相关推荐
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 剑指offer面试题31. 栈的压入、弹出序列(链表)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2 ...
- 剑指offer面试题[22]-栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 剑指offer(21)栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 数据结构与算法--举例分析法- 栈的压入弹出序列
举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...
- 剑指offer(21)栈的压入、探出序列
链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106 思路:借用一个辅助的栈,遍历压栈顺序,先将第 ...
- python 栈的压入弹出序列
| 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...
- 剑指offer——面试题31:连续子数组的最大和
剑指offer--面试题31:连续子数组的最大和 Solution1: 第一次做这道题.. 讲道理是这是标准的动态规划的题目,可是思路未完全想好. min_element(iterator, iter ...
- 剑指offer——面试题41:和为S的连续整数序列
剑指offer--面试题41:和为S的连续整数序列 Solution1:我的答案 基本思路是根据等差数列的前n项和推导出首项与项数的关系,设首项为a1a1a_1,项数为kkk,和为S" ro ...
最新文章
- 13 岁上大学,19 岁南大读博!00 后天才少女研究「中国芯」
- 马云最新演讲:未来10年,人类将面临AI、IoT和区块链等三大技术巨大挑战!
- [20170728]oracle保留字.txt
- 2020 年 5 大 DevOps 趋势
- 人人都能看懂的循环神经网络RNN
- 数据结构 - 字符串 - 最长公共子序列 + 最长公共子字符串 - 动态规划
- Codrops 教程:基于 CSS3 的精美模态窗口效果
- 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
- nvl2可以套公式吗 oracle_包装设计也可以套公式?8个公式带你玩转包装创意表现形式...
- 相机姿态估计(五)--DLS
- spark MLlib机器学习教程
- 1. 架构到底是指什么? 容易混淆的概念
- 装Linux gpt还是mbr,装机、装系统必备:秒懂MBR和GPT分区表
- Format函数详解
- Codeforces Round 444 div2 D Ratings and Reality Shows (双指针)
- 《时代》杂志评出的100部最佳英语小说(含下载)
- 在html里怎么给表单加上边框,html如何给table表单加边框
- v-for on stateful component root element because it renders multiple elements
- 6313网址大全恶意修注册表问题
- 仿文献高级检索多关键词查询的网页实现
热门文章
- LeetCode 1318. 或运算的最小翻转次数(位运算)
- LeetCode 1304. 和为零的N个唯一整数
- LeetCode 199. 二叉树的右视图(DFS 按层queue)
- 朴素贝叶斯算法--过滤垃圾短信
- php fpm 统计,php实现fpm开启状态统计的方法
- 如何看当前windows是utf8还是gbk_监理工程师5月份出教材,现在如何备考?
- mysql pdo 事务处理_php中pdo的mysql事务处理实例
- 数据库实例:mysql与redis结合用户登录
- prompt你到底行不行?
- 论文浅尝 - ACL2020 | Segmented Embedding of Knowledge Graphs