tomoebzk

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Leetcode 150 逆波兰表达式求值

本题的难点在于理解什么是波兰、逆波兰表达式,遍历字符串遍历到操作符则取出栈内的前两个数字进行运算,结果再压入栈中。由于遍历到的数字是字符的形式,所以需要先转化为int类型,可以通过stoll函数进行

波兰表达式 & 逆波兰表达式-CSDN博客

st.push(stoll(tokens[i]));
int evalRPN(vector<string>& tokens) {
        stack<long long>st;
        for(int i=0;i<tokens.size();++i)
        {
            
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
            {
                int b=st.top();
                st.pop();
                int a=st.top();
                st.pop();
                if(tokens[i]=="+")
                {
                    int num=a+b;
                    st.push(num);
                }
                if(tokens[i]=="-")
                {
                    int num=a-b;
                    st.push(num);
                }
                if(tokens[i]=="*")
                {
                    int num=a*b;
                    st.push(num);
                }
                if(tokens[i]=="/")
                {
                    int num=a/b;
                    st.push(num);
                }
            }
            
            else st.push(stoll(tokens[i]));

        }
        int result=st.top();
        st.pop();
        return result;
    }

Leetcode 239 滑动窗口最大值

该题如果是通过暴力来进行的话比较直观,但是如果采用线性时间复杂度来进行的话就有些困难,思考很久没有思路,看了解答才知道是没接触过的知识点。

通过deque实现一个单调队列

  1. pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作
  2. push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止
class myQueue
    {
       public:
        deque<int>que;
    void pop(int value)
    {
        if(!que.empty()&&value==que.front())
        {
            que.pop_front();
        }
    }

    void push(int value)
    {
        while(!que.empty()&&value>que.back())
        {
            que.pop_back();
        }
        que.push_back(value);
    }

    int front()
    {
        return que.front();
    }
    };

    

    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        myQueue que;
        vector<int>result;
        for(int i=0;i<k;++i)
        {
            que.push(nums[i]);
        }
        result.push_back(que.front());
        for(int i=k;i<nums.size();++i)
        {
            que.pop(nums[i-k]);
            que.push(nums[i]);
            result.push_back(que.front());
        }
        return result;


    }

Leetcode 347 前k个高频元素

没思路,大顶堆小顶堆也不太会,后面学了二叉树再回来做

posted on 2026-01-28 15:19  broderk  阅读(0)  评论(0)    收藏  举报