首页 > 其他分享 >Leetcode每日一题 20240729 682.棒球比赛

Leetcode每日一题 20240729 682.棒球比赛

时间:2024-07-30 23:27:29浏览次数:7  
标签:得分 记录 int ops 20240729 score scores Leetcode 682

题目描述

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:

整数 x :表示本回合新获得分数 x
“+” :表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
“D” :表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
“C” :表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
请你返回记录中所有得分的总和。

682.棒球比赛

测试案例及提示

示例 1:
输入:ops = [“5”,“2”,“C”,“D”,“+”]
输出:30
解释:
“5” - 记录加 5 ,记录现在是 [5]
“2” - 记录加 2 ,记录现在是 [5, 2]
“C” - 使前一次得分的记录无效并将其移除,记录现在是 [5].
“D” - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
“+” - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30

示例 2:
输入:ops = [“5”,“-2”,“4”,“C”,“D”,“9”,“+”,“+”]
输出:27
解释:
“5” - 记录加 5 ,记录现在是 [5]
“-2” - 记录加 -2 ,记录现在是 [5, -2]
“4” - 记录加 4 ,记录现在是 [5, -2, 4]
“C” - 使前一次得分的记录无效并将其移除,记录现在是 [5, -2]
“D” - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]
“9” - 记录加 9 ,记录现在是 [5, -2, -4, 9]
“+” - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]
“+” - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]
所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27

示例 3:
输入:ops = [“1”]
输出:1

提示:
1 <= ops.length <= 1000
ops[i] 为 “C”、“D”、“+”,或者一个表示整数的字符串。整数范围是 [-3 * 104, 3 * 104]
对于 “+” 操作,题目数据保证记录此操作时前面总是存在两个有效的分数
对于 “C” 和 “D” 操作,题目数据保证记录此操作时前面总是存在一个有效的分数

解题思路

看一遍题目就可以发现这题是个简单的分情况模拟的题目。
开辟一个数组,使用数组记录操作结果,方便读取前值等的回溯操作。
python

class Solution:
    def calPoints(self, operations: List[str]) -> int:
        scores = []  
        
        for op in operations:
            if op == 'C':
                scores.pop()
            elif op == 'D':
                scores.append(2 * scores[-1])
            elif op == '+':
                scores.append(scores[-1] + scores[-2])
            else:
                scores.append(int(op))

        total_score = sum(scores)
        return total_score

C

int calPoints(char** operations, int operationsSize) {
    int *score = malloc(operationsSize * sizeof(int));
    int m = 0;

    for (int i = 0; i < operationsSize; i++) {
        switch(operations[i][0]) {
            case '+':
                score[m] = score[m - 1] + score[m - 2];
                m++;
                break;
            case 'D':
                score[m] = 2 * score[m - 1];
                m++;
                break;
            case 'C':
                score[m - 1] = 0;
                m--;
                break;
            default:
                score[m] = atoi(operations[i]);
                m++;
        }
    }

    int sum = 0;
    for (int i = 0; i < m; i++) {
        sum += score[i];
    }

    free(score);

    return sum;
}

标签:得分,记录,int,ops,20240729,score,scores,Leetcode,682
From: https://blog.csdn.net/2301_76443687/article/details/140778460

相关文章

  • Leetcode每日一题 202040726 2740.找出分区值
    题目描述给你一个正整数数组nums。将nums分成两个数组:nums1和nums2,并满足下述条件:数组nums中的每个元素都属于数组nums1或数组nums2。两个数组都非空。分区值最小。分区值的计算方法是|max(nums1)-min(nums2)|。其中,max(nums1)表示数组nums1......
  • Leetcode每日一题 20240727 3106.满足约束且字典序最小的字符串
    题目描述给你一个字符串s和一个整数k。定义函数distance(s1,s2),用于衡量两个长度为n的字符串s1和s2之间的距离,即:字符‘a’到‘z’按循环顺序排列,对于区间[0,n-1]中的i,计算所有「s1[i]和s2[i]之间最小距离」的和。例如,distance(“ab”,......
  • Leetcode每日一题 20240730 2961.双模幂运算
    题目描述给你一个下标从0开始的二维数组variables,其中variables[i]=[ai,bi,ci,mi],以及一个整数target。如果满足以下公式,则下标i是好下标:0<=i<variables.length((aibi%10)ci)%mi==target返回一个由好下标组成的数组,顺序不限。2961.双模幂......
  • 代码随想录算法训练营Day0| LeetCode704: 二分查找
    LeetCode704二分查找先看了一下数组理论基础:数组基础题目链接:704.二分查找啥也没看,凭感觉直接上手:classSolution(object): defsearch(self,nums,target): fornuminnums: ifnum==target: returnnums.index(num) break return-1通过倒是......
  • (nice!!!)LeetCode 2952. 需要添加的硬币的最小数量(贪心、数组)
    题目:2952.需要添加的硬币的最小数量思路:假设区间[1,s-1]的数都可组合得到,当遍历到x=coins[i]时,1、当x<=s时,可以组合的数就是区间[1,s-1]和区间[x,s-1+x]的交集,即区间[1,s-1+x]2、当x>s时,区间[1,s-1]和区间[x,s-1+x]没有交集,那我就只能通过添加一个数来实现了。在这里......
  • leetcode题目总结
    前言本文为leetcode上的题目简单分析总结,仅作记录,欢迎提出建议,共同学习交流。 390.消除游戏列表 arr 由在范围 [1,n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步......
  • LeetCode15 三数之和
    前言题目:15.三数之和文档:代码随想录——三数之和编程语言:C++解题状态:没思路…思路不可包含重复三元组的条件是本题最大的难点,本题的一大思路在与排序后进行去重。代码双指针法classSolution{public:vector<vector<int>>threeSum(vector<int>&nums......
  • LeetCode-day30-2961. 双模幂运算
    LeetCode-day30-2961.双模幂运算题目描述示例示例1:示例2:思路代码题目描述给你一个下标从0开始的二维数组variables,其中variables[i]=[ai,bi,ci,mi],以及一个整数target。如果满足以下公式,则下标i是好下标:0<=i<variables.length((aibi%10)ci)......
  • LeetCode 756. Pyramid Transition Matrix
    原题链接在这里:https://leetcode.com/problems/pyramid-transition-matrix/description/题目:Youarestackingblockstoformapyramid.Eachblockhasacolor,whichisrepresentedbyasingleletter.Eachrowofblockscontains onelessblock thantherowbenea......
  • LeetCode面试150——121买卖股票的最佳时机
    题目难度:简单默认优化目标:最小化平均时间复杂度。Python默认为Python3。目录1题目描述2题目解析3算法原理及程序实现3.1暴力求解3.2动态规划参考文献1题目描述给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择......