返回
682. 棒球比赛:球迷场上的激烈对决
前端
2023-09-01 06:50:31
棒球比赛:球迷场上的激烈对决
大家好,我是挨打的阿木木,一名爱好算法的前端摸鱼老。今天我要跟大家分享的是leetcode 682题:《棒球比赛》。如果你也对算法感兴趣,欢迎关注我,一起学习。
题目 682. 棒球比赛
你正在观看一场棒球比赛,比赛记录是用整数数组scores
来表示的,其中 scores[i]
表示第 i
局的得分。
在比赛中,可能会出现以下三种情况:
- 加分 : +
- 得分 : R
- 取消 : X
- 如果出现加分(+),那么当前局得分记为上一局得分的两倍。
- 如果出现得分(R),那么当前局得分记为 1 分。
- 如果出现取消(X),那么取消上一次得分的记录。
示例 1:
输入:scores = [1, 2, 3, 4, 5]
输出:[1, 2, 4, 8, 16]
解释:
第 1 局得分:1 分
第 2 局得分:2 分
第 3 局得分:3 分,由于前一局得分为 2 分,所以这一局得分加倍
第 4 局得分:4 分,由于前一局得分为 4 分,所以这一局得分加倍
第 5 局得分:5 分,由于前一局得分为 4 分,所以这一局得分加倍
示例 2:
输入:scores = [4, 5, -2, -3, 1]
输出:[4, 9, 7, 4, 5]
解释:
第 1 局得分:4 分
第 2 局得分:5 分
第 3 局得分:-2 分,由于前一局得分为 5 分,所以这一局取消
第 4 局得分:-3 分,由于前一局得分被取消,所以这一局取消
第 5 局得分:1 分
算法实现
def calPoints(scores):
"""
:type scores: List[int]
:rtype: int
"""
# 创建一个栈来存储得分
stack = []
# 遍历记分情况
for score in scores:
# 加分
if score == "+":
# 将前两局的得分相加并入栈
stack.append(stack[-1] + stack[-2])
# 得分
elif score == "R":
# 入栈 1 分
stack.append(1)
# 取消
elif score == "X":
# 栈顶元素出栈
stack.pop()
# 其他情况
else:
# 入栈当前得分
stack.append(score)
# 计算总得分
total = 0
for score in stack:
total += score
return total
分析
这个算法首先使用一个栈来存储得分。然后,它遍历记分情况并根据不同的情况对栈进行操作。最后,它计算总得分并将其返回。
复杂度分析
- 时间复杂度:O(n),其中 n 是记分情况的数量。
- 空间复杂度:O(n),其中 n 是记分情况的数量。
结语
这就是我分享的leetcode 682题:《棒球比赛》的解题方法,希望能帮助到你。如果你有更好的解法,欢迎在评论区留言与我交流。