代码随想录算法训练营43期 | Day 11——150. 逆波兰表达式求值、239. 滑动窗口最大值(单调队列)、347.前 K 个高频元素(优先级队列)

代码随想录算法训练营

  • 代码随想录算法训练营43期 | Day 11
  • 150. 逆波兰表达式求值
    • 解题思路
  • 239. 滑动窗口最大值(单调队列)
    • 解题思路
  • 347.前 K 个高频元素(优先级队列)
    • 解题思路

代码随想录算法训练营43期 | Day 11

150. 逆波兰表达式求值

示例 1:
输入: [“2”, “1”, “+”, “3”, " * "]
输出: 9
解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:
输入: [“4”, “13”, “5”, “/”, “+”]
输出: 6
解释: 该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

解题思路

逆波兰表达式相当于二叉树的后序遍历

class Solution {
public:
    int evalRPN(vector& tokens) {
        //1 定义一个栈
        stack st;
        //2. 遍历字符串数组tokens
        for(int i = 0;i < tokens.size();i++)
        {
            //3. 判断遇到运算符
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
            {
                //4. 取出栈顶元素,并弹出
                int nums1 = st.top();
                st.pop();
                int nums2 = st.top();
                st.pop();
                //5. 判断两个数字之间的操作,需注意数字的顺序
                if(tokens[i]=="+")  st.push(nums2+nums1);
                if(tokens[i]=="-")  st.push(nums2-nums1);
                if(tokens[i]=="*")  st.push(nums2*nums1);
                if

你可能感兴趣的:(算法,C++,算法,leetcode,c++)