36:后缀表达式
:::info 题目:后缀表达式是一种算术表达式,它的操作符在操作数的后面。输入一个用字符串数组表示的后缀表达式,请输出该后缀表达式的计算结果。假设输入的一定是有效的后缀表达式。例如,后缀表达式[“2”,”1”,”3”,”“,”+”]对应的算术表达式是“2+13”,因此输出它的计算结果5。 :::
// evaluate Reverse Polish Notationpublic class evalRPN {public static int evalRPN(String[] arr) {Stack<Integer> stack = new Stack<>();List<String> operators = Arrays.asList("+", "-", "*", "/");for(String str : arr) {if(operators.contains(str)) {// 先pop的元素在operator右侧int num2 = stack.pop();// 后pop的元素在operator左侧int num1 = stack.pop();int rs = calculate(num1, num2, str);stack.push(rs);} else {stack.push(Integer.parseInt(str));}}return stack.pop();}private static int calculate(int num1, int num2, String operator) {switch(operator) {case "+":return num1 + num2;case "-":return num1 - num2;case "*":return num1 * num2;case "/":return num1 / num2;default:throw new UnsupportedOperationException();}}public static void main(String[] args) {String[] arr = {"2", "1", "3", "*", "+"};System.out.println(evalRPN(arr) == 5);}}
37:小行星碰撞
:::info 题目:输入一个表示小行星的数组,数组中每个数字的绝对值表示小行星的大小,数字的正负号表示小行星运动的方向,正号表示向右飞行,负号表示向左飞行。如果两颗小行星相撞,那么体积较小的小行星将会爆炸最终消失,体积较大的小行星不受影响。如果相撞的两颗小行星大小相同,那么它们都会爆炸消失。飞行方向相同的小行星永远不会相撞。求最终剩下的小行星。例如,有6颗小行星[4,5,-6,4,8,-5],如图6.2所示(箭头表示飞行的方向),它们相撞之后最终剩下3颗小行星[-6,4,8]。 :::
public class AsteroidCollision() {public static int[] asteroidCollision(int[] asteroids) {}}
