📌  相关文章
📜  通过从给定的二进制数组中选择一个或两个连续的数组元素,可以使玩家获得的最低分数(1)

📅  最后修改于: 2023-12-03 15:12:23.543000             🧑  作者: Mango

介绍

在一个给定的二进制数组中,每个元素要么为0,要么为1。现在玩家可以通过选择一个或两个连续的数组元素来获得分数,但是选择的元素不能是同一个元素。玩家获得的分数等于选择的元素中出现1的个数。请编写一个函数,计算出玩家能够获得的最低分数。

函数签名
def get_min_score(nums: List[int]) -> int:
    pass
示例
输入: [1,0,1,0,1]
输出: 1
解释: 玩家选择的两个连续元素可以是第2和第3个元素,此时得分为1分。
思路
  • 定义两个变量:当前元素的得分cur_score和历史最小得分min_score
  • 遍历数组元素,每遍历到一个元素:
    • 若当前元素为0,则将当前元素的得分置为0,因为选择该元素不会得分;
    • 若当前元素为1,则考虑选择当前元素和前一个元素,或者只选择当前元素,分别计算这两种情况的得分;
    • 对这两种情况的得分取最小值,即可得到当前元素的得分;
    • 更新历史最小得分;
  • 遍历结束后,返回历史最小得分即可。
代码
from typing import List

def get_min_score(nums: List[int]) -> int:
    cur_score = 0       # 当前元素的得分
    min_score = float("inf")    # 历史最小得分

    for i in range(len(nums)):
        # 当前元素为0,得分为0
        if nums[i] == 0:
            cur_score = 0
        # 当前元素为1,选择当前元素或当前元素和前一个元素中得分最小的一种
        else:
            if i > 0:
                cur_score = min(nums[i], nums[i-1])
            else:
                cur_score = nums[i]

        # 更新历史最小得分
        min_score = min(min_score, cur_score)

    return min_score