代码编织梦想

leetcode学习笔记150

问题

Evaluate Reverse Polish Notation

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +, -, *, /. Each operand may be an integer or another expression.

Note:

  • Division between two integers should truncate toward zero.
  • The given RPN expression is always valid. That means the expression would always evaluate to a result and there won’t be any divide by zero operation.

Example 1:

Input: [“2”, “1”, “+”, “3”, “*”]
Output: 9
Explanation: ((2 + 1) * 3) = 9

Example 2:

Input: [“4”, “13”, “5”, “/”, “+”]
Output: 6
Explanation: (4 + (13 / 5)) = 6

Example 3:

Input: [“10”, “6”, “9”, “3”, “+”, “-11”, “", “/”, "”, “17”, “+”, “5”, “+”]
Output: 22
Explanation:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

方法1

stack.

时间复杂度 O ( n ) O(n) O(n).
空间复杂度 O ( n ) O(n) O(n).

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new ArrayDeque<Integer>();
        for (String str : tokens) {
            switch (str) {
                case "+": {
                    int i1 = stack.pop();
                    int i2 = stack.pop();
                    stack.push(i2 + i1);
                    break;
                }
                case "-": {
                    int i1 = stack.pop();
                    int i2 = stack.pop();
                    stack.push(i2 - i1);
                    break;
                }
                case "*": {
                    int i1 = stack.pop();
                    int i2 = stack.pop();
                    stack.push(i2 * i1);
                    break;
                }
                case "/": {
                    int i1 = stack.pop();
                    int i2 = stack.pop();
                    stack.push(i2 / i1);
                    break;
                }
                default:
                    stack.push(Integer.valueOf(str));
            }
        }
        return stack.pop();
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_42498646/article/details/111037902

Java 泛 型 简 单 的 使 用! !-爱代码爱编程

前言 Java里面的泛型在实际开发中运用的很多,学过C++的同学一定知道C++的模板,而Java中的泛型,一定程度上和它还是挺像的。相信写Java的人,大都有用过List的实现类ArrayList。在Java没有泛型之前,它的内部是一个Object的数组实现的。这也导致一个问题,每次使用里面的元素的时候需要向下转型,而且很明显,如果是Object的话,意

纯java代码构建mybatis-爱代码爱编程

一、 工作原理、流程 二、代码构建 首先说明一下,我的代码中没有任何的配置文件,我们需要用我们的java代码完全代替 mybatis-config.xml的构建过程 构建配置类 添加mybatis的Mavne坐标 <dependency> <groupId>org.mybatis</g

Chrome提供了新功能,有了黑名单和沙箱保护,才能保护电脑的安全!-爱代码爱编程

目录 标签灵活 更加安全 黑名单 沙箱     标签灵活     Chrome为标签式浏览提供了新功能。用户可以“抓住”一个标签,并将它拖放到单独的窗口中。用户可以在一个窗口中整合多个标签。Chrome在启动时可以使用用户喜欢的某个标签的配置,其它浏览器需要第三方插件才能够提供这一功能。   更加安全 黑名单     (Bl

设计模式-创建型01-单例模式-爱代码爱编程

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2

剑指Offer——矩形覆盖(为什么是斐波那契数列)-爱代码爱编程

该博文是对剑指Offer——矩形覆盖问题解法的说明。 题目描述 作为一个菜鸡程序猿,第一次看到这题的时候,我是一脸懵逼的,但是本着学习的态度参考书中解法时,又是一脸懵逼。你要问我为什么,下面我给你娓娓道来。。。 剑指Offer中对这道题的解释如下: ???什么????这是斐波那契数列???怎么来的??? 最后通过本菜鸡的不懈努力,终于明白了,下面请继

Android 跳转设置电池不优化-爱代码爱编程

        Android系统为了增加电池使用时间,会对一些长时间在后台运行的应用进行限制。而我们的项目中,却不希望被限制。这时,可以提示用户关闭系统对应用的电池优化(默认时优化)。        1.取消/关闭电池优化,需要在AndroidManifest.xml加入使用权限 <uses-permission android:name="a

Fibonacci again and again(HDU 1848)经典组合博弈&SG不连续整数-爱代码爱编程

HDU1848 Fibonacci again and again 题目链接 Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1,2,3,5,8,13……就是菲波那

leetcode69 x的平方根-爱代码爱编程

题目描述 题目链接 代码 public int mySqrt(int x) { int left = 0; int right = x; int res = -1; while (left <= right) { int mid = (left + righ

300. 最长上升子序列-爱代码爱编程

链表算法题(程序员面试宝典) 解题思路主要来源于leetcode官方与《程序员面试宝典》。 300. 最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子

剑指Offer——矩形覆盖(为什么是斐波那契数列)-爱代码爱编程

该博文是对剑指Offer——矩形覆盖问题解法的说明。 题目描述 作为一个菜鸡程序猿,第一次看到这题的时候,我是一脸懵逼的,但是本着学习的态度参考书中解法时,又是一脸懵逼。你要问我为什么,下面我给你娓娓道来。。。 剑指Offer中对这道题的解释如下: ???什么????这是斐波那契数列???怎么来的??? 最后通过本菜鸡的不懈努力,终于明白了,下面请继

LeetCode——347. 前 K 个高频元素-爱代码爱编程

题目描述: 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 提示: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。 你可以按任意顺序返回答案。 示例 1:

Day3-1 leetcode 283. Move Zeroes-爱代码爱编程

Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements. 方法一:直接遍历,一个个的把0往后面调整(但是有一个问题就是时间复杂度太高,leetc