关于java:offer-30-包含min函数的栈

42次阅读

共计 430 个字符,预计需要花费 2 分钟才能阅读完成。

蕴含 min 函数的栈

题目剖析

本题如果用 for 比照找最小值,那就是很简略,然而复杂度很高,所以 难点就是怎么将工夫复杂度降到 O1
所以此时应该用一个辅助栈 B,栈 A 就是失常入栈出栈,栈 B 是栈 A 入栈出栈的最小元素,且最小元素始终在栈顶,调用 min 函数的时候间接出栈即可

比方 9 入栈,此时 min 就是 9,9 也入栈 A,而后 10 入栈,此时 min 还是 9. 那 10 就不入栈 B,而后 7 入栈,此时 min 是 7,所以 7 也入栈 B,而后 3 入栈,此时 min 是 3,所以 3 也入栈 B,而后 5 入栈,此时 min 是 3,那 5 就不入栈 B

思路

  • 入栈:如果 B 为空,那么元素就得入栈 B,如果新加的元素比栈 B 的栈顶元素小,那么元素也得入栈 B
  • 出栈:如果 A 出栈元素 = B 栈顶元素,那 B 也得出栈
  • top:返回 A 的栈顶元素
  • min:返回 B 的栈顶元素
  • 这个是纯栈
  • 用列表 linkedlist 示意栈
  • 这个是人家他人的思路,永远拿入栈元素和栈 B 的栈顶元素进行比照,而后再栈 B 中入两者中小的那个元素,而后在出栈的时候就不必比照是不是相等了,两个一起出栈即可
正文完
 0