剑指 Offer 31. 栈的压入、弹出序列
创始人
2024-05-29 06:36:07
0

摘要

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

一、判断是否为栈解析

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

这道题需要利用给定的两个数组pushed和popped的如下性质:

  • 数组 pushed中的元素互不相同;
  • 数组 popped和数组 pushed的长度相同;
  • 数组 popped是数组 pushed的一个排列。

根据上述性质,可以得到如下结论:

  • 栈内不可能出现重复元素;
  • 如果pushed和popped是有效的栈操作序列,则经过所有的入栈和出栈操作之后,每个元素各入栈和出栈一次,栈为空。

因此,可以遍历两个数组,模拟入栈和出栈操作,判断两个数组是否为有效的栈操作序列。模拟入栈操作可以通过遍历数组 pushed实现。由于只有栈顶的元素可以出栈,因此模拟出栈操作需要判断栈顶元素是否与popped的当前元素相同,如果相同则将栈顶元素出栈。由于元素互不相同,因此当栈顶元素与popped的当前元素相同时必须将栈顶元素出栈,否则出栈顺序一定不等于popped。

根据上述分析,验证栈序列的模拟做法如下:

  • 遍历数组 pushed,将 pushed的每个元素依次入栈;
  • 每次将 pushed的元素入栈之后,如果栈不为空且栈顶元素与popped的当前元素相同,则将栈顶元素出栈,同时遍历数组 popped,直到栈为空或栈顶元素与 popped的当前元素不同。

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

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {Stack stack=new Stack<>();int index=0;for (int i:pushed){stack.add(i);while (!stack.isEmpty()&&stack.peek()==popped[index]){stack.pop();index++;}}return stack.isEmpty();}
}

复杂度分析

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

博文参考

 《leetcode》

相关内容

热门资讯

仁度生物跌2.47%,成交额1... 2月28日,仁度生物跌2.47%,成交额1208.20万元,换手率1.07%,总市值14.84亿元。...
仁信新材跌1.85%,该股筹码... 2月28日,仁信新材跌1.85%,成交额2511.51万元,换手率1.97%,总市值23.66亿元。...
嘉亨家化跌2.46%,该股筹码... 2月28日,嘉亨家化跌2.46%,成交额2393.64万元,换手率2.60%,总市值15.57亿元。...
永信至诚涨0.76%,目前股价... 2月28日,永信至诚涨0.76%,成交额2.43亿元,换手率8.75%,总市值56.74亿元。根据A...
九牧王跌0.93%,成交额54... 2月28日,九牧王跌0.93%,成交额5486.50万元,换手率1.11%,总市值48.84亿元。根...
凌霄泵业跌1.52%,成交额5... 2月28日,凌霄泵业跌1.52%,成交额5988.34万元,换手率1.25%,总市值62.70亿元。...
中复神鹰跌3.38%,成交额1... 2月28日,中复神鹰跌3.38%,成交额1.70亿元,换手率5.33%,总市值190.17亿元。根据...
三孚新科跌1.06%,该股筹码... 2月28日,三孚新科跌1.06%,成交额5463.09万元,换手率1.23%,总市值44.44亿元。...
盛视科技跌8.09%,成交额2... 2月28日,盛视科技跌8.09%,成交额2.25亿元,换手率5.71%,总市值74.55亿元。根据A...
电气风电跌1.09%,成交额2... 2月28日,电气风电跌1.09%,成交额2.38亿元,换手率2.13%,总市值109.33亿元。根据...
中天火箭跌1.87%,该股筹码... 2月28日,中天火箭跌1.87%,成交额4454.10万元,换手率0.76%,总市值58.68亿元。...
浙文影业跌5.40%,成交额1... 2月28日,浙文影业跌5.40%,成交额1.09亿元,换手率2.49%,总市值42.71亿元。根据A...
豪恩汽电跌6.60%,成交额2... 2月28日,豪恩汽电跌6.60%,成交额2.77亿元,换手率16.39%,总市值64.67亿元。根据...
常润股份跌3.38%,该股筹码... 2月28日,常润股份跌3.38%,成交额4068.88万元,换手率3.40%,总市值28.93亿元。...
大洋电机:公司前瞻技术研究院启... 投资者提问:董秘,您好,公司是否有投资生产机器人电机的计划?谢谢董秘回答(大洋电机SZ002249)...
龙磁科技跌4.55%,短期趋势... 2月28日,龙磁科技跌4.55%,成交额1.51亿元,换手率4.55%,总市值47.84亿元。根据A...
普元信息跌6.24%,短期趋势... 2月28日,普元信息跌6.24%,成交额9299.67万元,换手率4.10%,总市值22.08亿元。...
苏州龙杰跌2.22%,成交额5... 2月28日,苏州龙杰(维权)跌2.22%,成交额5293.45万元,换手率2.61%,总市值19.9...
航亚科技跌3.83%,成交额5... 2月28日,航亚科技跌3.83%,成交额5682.96万元,换手率1.29%,总市值43.51亿元。...
物产金轮跌1.56%,目前股价... 2月28日,物产金轮跌1.56%,成交额1.82亿元,换手率6.52%,总市值32.52亿元。根据A...