算法练习Day11| 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素

#算法#队列#栈#leetcode

今天有三道题,后面两道题按照要求可以不做,但是得了解KMP算法。目前先解决第一道题,后面会补充后面两道题。

150. 逆波兰表达式求值

题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

不了解逆波兰表达式的朋友可以先学习下,这个还是很有意思的。

思路:创建一个栈存储数字和结果,遍历字符串然,数字的话就入栈,运算符的话,取出栈顶的前两个元素进行运算,将运算结果再入栈,最终栈里面只有一个结果,出栈即可。

具体代码:

public int evalRPN(String[] tokens) {
        if(null == tokens) {
            return 0;
        }
        Deque<Integer> q = new ArrayDeque<>();
        for(String s : tokens) {
            if(s.equals("+")) {
                q.push(q.pop() + q.pop());
            } else if(s.equals("-")) {
                int subtrahend = q.pop();
                int minuend = q.pop();
                q.push(minuend - subtrahend);
            } else if(s.equals("*")) {
                q.push(q.pop() * q.pop());
            } else if(s.equals("/")) {
                int divisor = q.pop();
                int dividend = q.pop();
                q.push(dividend / divisor);
            }else {
                q.push(Integer.parseInt(s));
            }
        }
        return q.pop();
    }

这里需要注意,因为减法和除法有顺序要求,需要处理下。

KMP算法

未完待续!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值