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

image-20201207212358644

解法:贪心

思想:

​ 贪心:如果栈顶元素等于popped序列中下一个值,则应立刻将该值pop出来

复杂度:

​ ●时间:O(N),入栈一次出栈一次

​ ●空间:O(N),辅助栈

代码:

class Solution {
    
    
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
    
    
        if(pushed.size() != popped.size())
            return false;
        if(pushed.size() == 0)
            return true;
        int index = 0;
        stack<int>my_stack;
        for(int num : pushed){
    
    
            my_stack.push(num);
            //不为空且栈顶元素等于下一个popped元素时,才弹出
            //注意是while
            while(!my_stack.empty() && my_stack.top() == popped[index]){
    
    
                my_stack.pop();
                index++;
            }
        }
        //pushed中元素全部遍历完,跳出循环
        return my_stack.empty();
    }
};

猜你喜欢

转载自blog.csdn.net/qq_36459662/article/details/113924948
今日推荐