|
1 |
| -import java.util.ArrayList; |
2 |
| -import java.util.Arrays; |
3 |
| -import java.util.List; |
| 1 | +import java.util.Set; |
| 2 | +import java.util.Stack; |
4 | 3 |
|
5 | 4 | public class HelloWorld {
|
6 |
| - public static int[][] insert(int[][] intervals, int[] newInterval) { |
7 |
| - if (intervals.length == 0) { |
8 |
| - return new int[][] { newInterval }; |
9 |
| - } |
10 |
| - |
11 |
| - final int startIndex = binarySearch(intervals, newInterval[0]); |
12 |
| - |
13 |
| - final List<int[]> result = new ArrayList<>(); |
14 |
| - for (int i = 0 ; i < startIndex ; i++) { |
15 |
| - result.add(intervals[i]); |
16 |
| - } |
17 |
| - result.add(newInterval); |
18 |
| - for (int i = startIndex ; i < intervals.length ; i++) { |
19 |
| - result.add(intervals[i]); |
20 |
| - } |
21 |
| - |
22 |
| - return mergeIntervals(result); |
23 |
| - } |
24 |
| - |
25 |
| - private static int[][] mergeIntervals(List<int[]> intervals) { |
26 |
| - final List<int[]> result = new ArrayList<>(); |
27 |
| - int start = intervals.getFirst()[0], end = intervals.getFirst()[1]; |
28 |
| - for (int[] interval : intervals) { |
29 |
| - if (interval[0] <= end) { |
30 |
| - end = Math.max(interval[1], end); |
| 5 | + private static final Set<String> OPERATORS = Set.of("+", "-", "*", "/"); |
| 6 | + |
| 7 | + public int evalRPN(String[] tokens) { |
| 8 | + final Stack<Integer> stack = new Stack<>(); |
| 9 | + for (String token : tokens) { |
| 10 | + if (isOperator(token)) { |
| 11 | + final int second = stack.pop(); |
| 12 | + final int first = stack.pop(); |
| 13 | + final int result = apply(token, first, second); |
| 14 | + stack.push(result); |
31 | 15 | } else {
|
32 |
| - result.add(new int[]{start, end}); |
33 |
| - start = interval[0]; |
34 |
| - end = interval[1]; |
| 16 | + stack.push(Integer.parseInt(token)); |
35 | 17 | }
|
36 | 18 | }
|
37 |
| - result.add(new int[] { start, end }); |
38 |
| - return toArray(result); |
| 19 | + return stack.peek(); |
39 | 20 | }
|
40 | 21 |
|
41 |
| - private static int binarySearch(int[][] intervals, int x) { |
42 |
| - int left = 0, right = intervals.length - 1, middle; |
43 |
| - while (left <= right) { |
44 |
| - middle = left + (right - left) / 2; |
45 |
| - if (intervals[middle][0] == x) return middle; |
46 |
| - else if (intervals[middle][0] < x) left = middle + 1; |
47 |
| - else right = middle - 1; |
48 |
| - } |
49 |
| - return left; |
| 22 | + private static boolean isOperator(String token) { |
| 23 | + return OPERATORS.contains(token); |
50 | 24 | }
|
51 | 25 |
|
52 |
| - private static int[][] toArray(List<int[]> intervals) { |
53 |
| - final int[][] result = new int[intervals.size()][2]; |
54 |
| - int k = 0; |
55 |
| - for (int[] interval : intervals) { |
56 |
| - result[k++] = interval; |
57 |
| - } |
58 |
| - return result; |
59 |
| - } |
60 |
| - |
61 |
| - public static void main(String[] args) { |
62 |
| -// System.out.println(Arrays.deepToString( |
63 |
| -// insert(new int[][]{{1, 3}, {6, 9}}, new int[] {2, 5}) |
64 |
| -// )); |
65 |
| - |
66 |
| -// System.out.println(Arrays.deepToString( |
67 |
| -// insert( |
68 |
| -// new int[][] {{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}}, |
69 |
| -// new int[] {4, 8} |
70 |
| -// ) |
71 |
| -// )); |
72 |
| - |
73 |
| - System.out.println(Arrays.deepToString( |
74 |
| - insert( |
75 |
| - new int[][] {{1, 3}, {6, 9}}, |
76 |
| - new int[] {2, 5} |
77 |
| - ) |
78 |
| - )); |
| 26 | + private static int apply(String operator, int first, int second) { |
| 27 | + return switch (operator) { |
| 28 | + case "+" -> first + second; |
| 29 | + case "-" -> first - second; |
| 30 | + case "/" -> first / second; |
| 31 | + case "*" -> first * second; |
| 32 | + default -> 0; |
| 33 | + }; |
79 | 34 | }
|
80 | 35 | }
|
0 commit comments