返回
LeetCode 682:特殊赛制棒球比赛,挥洒你的算法梦想
前端
2024-01-07 02:01:27
挥洒棒球梦想:剑指 LeetCode 682
背景
欢迎来到棒球场的绿茵场上,各位选手,让我们共同领略这场激动人心的棒球比赛的精彩瞬间。今天,我们将聚焦 LeetCode 682,一场特殊赛制的棒球比赛,考验着我们的代码技术和策略思维。
比赛规则
这场特殊的棒球比赛由若干回合组成,每一回合都有一个记录。记录中包含一个或多个整数,表示击球员在本回合中获得的得分。我们的目标是计算比赛结束时的总得分。
但这场比赛有独特的规则:
- 如果记录中出现
-1
,表示击球出局。 - 如果记录中出现
0
,表示击球手没有得分。 - 否则,记录中的数字表示击球手在本回合中获得的得分。
策略制胜
要在这场独特的棒球比赛中获胜,需要制定一个周全的策略。以下是我们的制胜秘诀:
-
逐回合计算得分:
遍历记录,根据比赛规则逐回合计算击球手的得分。 -
积累总得分:
每计算完一轮得分,将其添加到总得分中。 -
处理出局:
遇到-1
时,表示击球出局,结束该回合,不累加本回合得分。 -
优化效率:
使用一个辅助变量保存当前回合的得分,在遇到-1
时及时重置。
算法实现
以下是使用 JavaScript 实现 LeetCode 682 问题的算法:
/**
* @param {number[]} ops
* @return {number}
*/
const calPoints = (ops) => {
let score = 0;
let roundScore = 0;
const stack = [];
for (const op of ops) {
if (op === '+') {
roundScore = stack[stack.length - 1] + stack[stack.length - 2];
} else if (op === 'D') {
roundScore = 2 * stack[stack.length - 1];
} else if (op === 'C') {
stack.pop();
continue;
} else {
roundScore = parseInt(op);
}
stack.push(roundScore);
score += roundScore;
}
return score;
};
结语
LeetCode 682 是一道考验代码技巧和策略思维的算法题。通过遵循我们的制胜秘诀和提供的算法实现,相信各位选手都能在这场比赛中挥洒梦想,取得胜利。祝愿大家在算法之旅中不断进步,勇攀高峰!