返回

LeetCode 682:特殊赛制棒球比赛,挥洒你的算法梦想

前端

挥洒棒球梦想:剑指 LeetCode 682

背景

欢迎来到棒球场的绿茵场上,各位选手,让我们共同领略这场激动人心的棒球比赛的精彩瞬间。今天,我们将聚焦 LeetCode 682,一场特殊赛制的棒球比赛,考验着我们的代码技术和策略思维。

比赛规则

这场特殊的棒球比赛由若干回合组成,每一回合都有一个记录。记录中包含一个或多个整数,表示击球员在本回合中获得的得分。我们的目标是计算比赛结束时的总得分。

但这场比赛有独特的规则:

  • 如果记录中出现 -1,表示击球出局。
  • 如果记录中出现 0,表示击球手没有得分。
  • 否则,记录中的数字表示击球手在本回合中获得的得分。

策略制胜

要在这场独特的棒球比赛中获胜,需要制定一个周全的策略。以下是我们的制胜秘诀:

  1. 逐回合计算得分:
    遍历记录,根据比赛规则逐回合计算击球手的得分。

  2. 积累总得分:
    每计算完一轮得分,将其添加到总得分中。

  3. 处理出局:
    遇到 -1 时,表示击球出局,结束该回合,不累加本回合得分。

  4. 优化效率:
    使用一个辅助变量保存当前回合的得分,在遇到 -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 是一道考验代码技巧和策略思维的算法题。通过遵循我们的制胜秘诀和提供的算法实现,相信各位选手都能在这场比赛中挥洒梦想,取得胜利。祝愿大家在算法之旅中不断进步,勇攀高峰!