每日一题——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)

相关文章
|
机器学习/深度学习
OFDM——PAPR减小(二)
OFDM——PAPR减小(二)
168 0
|
Java Linux 数据安全/隐私保护
jdk21(最新版) download 配置(linux window mac)
不同系统使用最新版jdk后续持续更新 可评论区提问
2948 0
|
存储 设计模式 测试技术
怎么基于Pytest+Requests+Allure实现接口自动化测试?
该文介绍了一个基于Python的自动化测试框架,主要由pytest、requests和allure构成,采用关键字驱动模式。项目结构分为六层:工具层(api_keyword)封装了如get、post的请求;参数层(params)存储公共参数;用例层(case)包含测试用例;数据驱动层(data_driver)处理数据;数据层(data)提供数据;逻辑层(logic)实现用例逻辑。代码示例展示了如何使用allure装饰器增强测试报告,以及如何使用yaml文件进行数据驱动。
519 0
|
Java 测试技术 Android开发
Junit - 期望异常测试(Expected Test)
Junit - 期望异常测试(Expected Test)
1444 0
|
Java Spring 容器
|
数据采集 XML API
淘宝商品评论数据采集教程丨淘宝商品评论数据接口(Taobao.item_review)
**摘要:** 本教程指导如何使用淘宝(Taobao.item_review)接口采集商品评论。步骤包括注册开发者账号,创建应用获取API密钥,发送请求(如num_iid, page, size参数),解析JSON或XML返回数据,并遵循使用规则与安全注意事项。接口允许获取商品评论列表,含评论内容、评论者信息等,适用于数据分析和市场研究。务必保护API密钥并遵守使用政策。
|
10月前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
1173 2
|
11月前
|
存储 JavaScript 安全
Web安全之XSS跨站脚本攻击
XSS(跨站脚本攻击)
218 7
|
SpringCloudAlibaba Dubbo 应用服务中间件
SpringCloudAlibaba:3.1dubbo
SpringCloudAlibaba:3.1dubbo
238 2
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
474 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问