LWC 51:682. Baseball Game

LWC 51:682. Baseball Game

传送门:682. Baseball Game

Problem:

You’re now a baseball game point recorder. Given a list of strings, each string can be one of the 4 following types:

  1. Integer (one round’s score): Directly represents the number of points you get in this round.
  2. “+” (one round’s score): Represents that the points you get in this round are the sum of the last two valid round’s points.
  3. “D” (one round’s score): Represents that the points you get in this round are the doubled data of the last valid round’s points.
  4. “C” (an operation, which isn’t a round’s score): Represents the last valid round’s points you get were invalid and should be removed. Each round’s operation is permanent and could have an impact on the round before and the round after.

You need to return the sum of the points you could get in all the rounds.

Example 1:

Input: [“5”,”2”,”C”,”D”,”+”] Output: 30 Explanation: Round 1: You could get 5 points. The sum is: 5. Round 2: You could get 2 points. The sum is: 7. Operation 1: The round 2’s data was invalid. The sum is: 5. Round 3: You could get 10 points (the round 2’s data has been removed). The sum is: 15. Round 4: You could get 5 + 10 = 15 points. The sum is: 30.

Example 2:

Input: [“5”,”-2”,”4”,”C”,”D”,”9”,”+”,”+”] Output: 27 Explanation: Round 1: You could get 5 points. The sum is: 5. Round 2: You could get -2 points. The sum is: 3. Round 3: You could get 4 points. The sum is: 7. Operation 1: The round 3’s data is invalid. The sum is: 3. Round 4: You could get -4 points (the round 3’s data has been removed). The sum is: -1. Round 5: You could get 9 points. The sum is: 8. Round 6: You could get -4 + 9 = 5 points. The sum is 13. Round 7: You could get 9 + 5 = 14 points. The sum is 27.

Note:

The size of the input list will be between 1 and 1000.

Every integer represented in the list will be between -30000 and 30000.

思路: straightforward,题意即思路。

代码如下:

    public int calPoints(String[] ops) {
        List<Integer> ans = new ArrayList<>();
        for (int i = 0; i < ops.length; ++i) {
            String val = ops[i];
            if (val.equals("C")) {
                ans.remove(ans.size() - 1);
            }
            else if (val.equals("D")) {
                int last = ans.get(ans.size() - 1);
                ans.add(last * 2);
            }
            else if (val.equals("+")) {
                int last = ans.get(ans.size() - 1);
                int prev = ans.get(ans.size() - 2);
                ans.add(last + prev);
            }
            else {
                int num = Integer.parseInt(val);
                ans.add(num);
            }
        }

        int sum = 0;
        for (int i = 0; i < ans.size(); ++i) {
            sum += ans.get(i);
        }
        return sum;
    }

数组的长度其实是已知的,所以直接用指针动态增减,代码如下:

    public int calPoints(String[] ops) {
        int n = ops.length;
        int[] list = new int[n + 1];
        int tot = 0;
        for (int i = 0; i < n; ++i) {
            String val = ops[i];
            if (val.equals("C")) {
                tot--;
            }
            else if (val.equals("D")) {
                int lst = list[tot - 1];
                list[tot++] = lst * 2;
            }
            else if (val.equals("+")) {
                int lst = list[tot - 1];
                int prv = list[tot - 2];
                list[tot++] = lst + prv;
            }
            else {
                int num = Integer.parseInt(val);
                list[tot++] = num;
            }
        }

        int sum = 0;
        for (int i = 0; i < tot; ++i) {
            sum += list[i];
        }

        return sum;
    } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

hdu----(5045)Contest(数位dp)

Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (J...

3435
来自专栏算法修养

PAT 甲级 1104 sum of Number Segments

1104. Sum of Number Segments (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16...

2665
来自专栏ml

POJ--Strange Way to Express Integers

Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K ...

2677
来自专栏xingoo, 一个梦想做发明家的程序员

Prim算法

普利姆算法,是一种常用的求最小生成树的算法。 最小生成树,使得一个连通图内拥有最小的和。对现实生活中有极大的作用。 主要思路 1 选定一个顶点(与结果无关) 2...

1677
来自专栏算法修养

POJ-1926 Pollution

Pollution Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 40...

3289
来自专栏算法修养

HDU 4238 You Are the One

You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32...

3086
来自专栏算法修养

POJ-1959 Darts

Darts Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1286 ...

33310
来自专栏算法修养

POJ--1050--To the Max(线性动规,最大子矩阵和)

To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4...

3265
来自专栏小樱的经验随笔

Codeforces 777C Alyona and Spreadsheet

C. Alyona and Spreadsheet time limit per test:1 second memory limit per test:256...

37013
来自专栏WD学习记录

Leetcode Regular Expression Matching

Given an input string (s) and a pattern (p), implement regular expression matchi...

682

扫码关注云+社区