华为OD机试真题 Java 实现【投篮大赛】【2023Q1 100分】

一、题目描述

你现在是一场采用特殊赛制投篮大赛的记录员。

这场比赛由若于回合组成,过去几回合的得分可能会影响以后几回合的得分,比赛开始时,记录是空白的。

你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第i项操作,ops 遵循下述规则:

  1. 整数 x - 表示本回合新获得分数 x;
  2. "+” 表示本回合新获得的得分是前两次得分的总和;
  3. “D” 表示本回合新获得的得分是前一次得分的两倍;
  4. “C” 表示本回合没有分数,并且前一次得分无效,将其从记录中移除;

请你返回记录中所有得分的总和。

二、输入描述

输入为一个字符串数组。

三、输出描述

输出为一个整形数字。

四、解题思路

  1. 创建一个空的双端队列list,用于记录得分;
  2. 循环遍历操作字符串数组ops中的每个操作:
    • 如果操作是整数,则将其转换为整数并将其添加到队列list中,表示本回合新获得分数;
    • 如果操作是"+",则需要计算本回合新获得的得分是前两次得分的总和:
      • 首先检查队列list的元素个数是否大于等于2,若小于2,则表示无法计算总和,输出-1;
      • 从队列list的尾部取出最后两个元素,并计算它们的总和;
      • 将计算得到的总和添加到队列list的尾部,并恢复原来的两个元素顺序࿱

你可能感兴趣的:(java,华为,开发语言,算法,面试)