2019-07-17栈的压入、弹出序列

2019-07-17  本文已影响0人  mztkenan

1hour,两个地方的问题。第一次面向测试用例编程

# -*- coding:utf-8 -*-
class Solution:
    tmp=[]
    def IsPopOrder(self, pushV, popV):
        if not popV or not pushV:return False #鲁棒性
        for a in pushV:
            if popV[0]==a:
                popV.pop(0)
                while self.tmp and popV and self.tmp[-1]==popV[0]: # 这里会越界
                    self.tmp.pop()  #这里少了把tmp中弹出
                    popV.pop(0)
            else:
                self.tmp.append(a)
        if not popV: return True
        else:return False



if __name__ == '__main__':
    t=Solution()
    print(t.IsPopOrder([1,2,3],[1,2,3]))
    print(t.IsPopOrder([1,2,3,4,5],[4,5,3,2,1]))
    print(t.IsPopOrder([],[]))
    print(t.IsPopOrder([1],[]))
    print(t.IsPopOrder([],[1]))
    print(t.IsPopOrder([1,2,3],[3,1,2]))

优秀的程序,其实思路一样的,就是更有逻辑

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if(pushV.size() == 0) return false;
        vector<int> stack;
        for(int i = 0,j = 0 ;i < pushV.size();){
            stack.push_back(pushV[i++]);
            while(j < popV.size() && stack.back() == popV[j]){
                stack.pop_back();
                j++;
            }      
        }
        return stack.empty();
    }
};
上一篇 下一篇

猜你喜欢

热点阅读