美文网首页
(8)栈和队列的相关题目

(8)栈和队列的相关题目

作者: 顽皮的石头7788121 | 来源:发表于2019-03-13 10:37 被阅读0次

    栈和队列最大的不同是,一个先进先出,一个后进先出。

    (1)利用两个栈实现一个队列

    算法思路:Stack1 放入压在队列中的元素,Stack2用于剔除队列中的元素。当stack2 中不为空时,其顺序即为剔除顺序即可,若为空,将stack1中的元素弹出到stack2中。

    (2)包含min函数的栈

    1、解法1
    借助辅助栈,每次如果元素小于辅助栈内的最小元素,则压栈,否则,将栈底元素压栈。
    2、解法2
    push(int elem)函数在栈中压入当前元素与当前栈中最小元素的差值,然后通过比较当前元素与当前栈中最小元素大小,并将它们中间的较小值压入。
    pop()函数执行的时候,先pop出栈顶的两个值,这两个值分别是当前栈中最小值min和最后压入的元素与栈中最小值的差值diff。如果diff<0,则表示最后压入栈的元素是最小的元素,因此只需将min-diff压入栈中,并将min值返回即可。min-diff就是当前元素弹出后,栈中剩下元素的最小值。而如果diff>=0且栈不为空,则表示当前值不是最小值,所以需要在栈中压入最小值min并将diff+min返回;如果栈为空,则表示已经是最后一个数字,直接返回min即可

    clear(): [ ] 
    push(3): [3 3] 
    push(4): [3 1 3] 
    push(2): [3 1 -1 2] 
    push(5): [3 1 -1 3 2] 
    push(1): [3 1 -1 3 -1 1] 
    push(1): [3 1 -1 3 -1 0 1] 
    push(6): [3 1 -1 3 -1 0 5 1] 
    push(7): [3 1 -1 3 -1 0 5 6 1]
    min() --> 1; pop() --> 7: [3 1 -1 3 -1 0 5 1] 
    min() --> 1; pop() --> 6: [3 1 -1 3 -1 0 1] 
    min() --> 1; pop() --> 1: [3 1 -1 3 -1 1] 
    min() --> 1; pop() --> 1: [3 1 -1 3 2] 
    min() --> 2; pop() --> 5: [3 1 -1 2] 
    min() --> 2; pop() --> 2: [3 1 3] 
    min() --> 3; pop() --> 4: [3 3] 
    min() --> 4; pop() --> 3: [ ]
    

    (3)括号比配算法

    相关代码见:https://github.com/yuanfuqiang456/LeetCode/blob/master/src/String/KuoHao.java

    (4)实现一个电梯算法

    算法思路:两个栈,一个含min函数,一个含max函数,实现上升下降。

    相关文章

      网友评论

          本文标题:(8)栈和队列的相关题目

          本文链接:https://www.haomeiwen.com/subject/bjqzpqtx.html