每日一题——leetcode682.棒球比赛

简介: 每日一题——leetcode682.棒球比赛

题目描述

这是来自LeetCode的第682题,题目链接:棒球比赛

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

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则: 整数 x - 表示本回合新获得分数 x

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


输入: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

思路

遍历ops数组,数组的任意项的值可以被枚举出来:CD+数字,然后用一个新的数组res存储当前步骤的结果,实际上就是一个栈操作

  • C:栈pop一次
  • D:取栈最后一个元素*2,入栈
  • +:取最后两个元素相加,入栈
  • 数字:直接入栈

ops遍历结束后,将res的值累加返回即可。

代码

/**
 * @param {string[]} ops
 * @return {number}
 */
var calPoints = function (ops) {
    const res = []
    ops.forEach(opsItem => {
        switch (opsItem) {
            case 'C': {
                res.pop()
                break
            }
            case 'D': {
                const val = Number(res[res.length - 1])
                res.push(val * 2)
                break
            }
            case '+': {
                const val1 = Number(res[res.length - 1])
                const val2 = Number(res[res.length - 2])
                res.push(val1 + val2)
                break
            }
            default: {
                res.push(Number(opsItem))
                break
            }
        }
    })
    return res.reduce((prev, cur) => prev + cur)
};

空间复杂度O(N)

时间复杂度O(N)

相关文章
|
Java Linux 数据安全/隐私保护
jdk21(最新版) download 配置(linux window mac)
不同系统使用最新版jdk后续持续更新 可评论区提问
3573 0
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
610 0
|
自然语言处理 数据可视化 数据挖掘
基于词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析(下)
基于词云图+Kmeans聚类+LDA主题分析+社会网络语义分析对大唐不夜城用户评论进行分析
584 0
|
数据采集 XML API
淘宝商品评论数据采集教程丨淘宝商品评论数据接口(Taobao.item_review)
**摘要:** 本教程指导如何使用淘宝(Taobao.item_review)接口采集商品评论。步骤包括注册开发者账号,创建应用获取API密钥,发送请求(如num_iid, page, size参数),解析JSON或XML返回数据,并遵循使用规则与安全注意事项。接口允许获取商品评论列表,含评论内容、评论者信息等,适用于数据分析和市场研究。务必保护API密钥并遵守使用政策。
1199 1
|
8月前
|
JavaScript Linux Python
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
423 20
|
Web App开发 安全 Linux
远程控制软件
远程控制软件介绍
389 5
|
存储 JavaScript 安全
Web安全之XSS跨站脚本攻击
XSS(跨站脚本攻击)
393 7
|
SpringCloudAlibaba Dubbo 应用服务中间件
SpringCloudAlibaba:3.1dubbo
SpringCloudAlibaba:3.1dubbo
362 2
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
746 0
|
编译器 C语言
gcc编译警告:warning: suggest parentheses around assignment used as truth value
gcc编译警告:warning: suggest parentheses around assignment used as truth value
993 0