LeetCode 题解工作台

得到更多分数的最少关卡数目

给你一个长度为 n 的二进制数组 possible 。 Alice 和 Bob 正在玩一个有 n 个关卡的游戏,游戏中有一些关卡是 困难 模式,其他的关卡是 简单 模式。如果 possible[i] == 0 ,那么第 i 个关卡是 困难 模式,两个玩家 都不可能 通过。一个玩家通过一个简单模式的关…

category

2

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

中等 · 前缀和

bolt

答案摘要

我们先计算得到两个玩家能得到的分数和,记为 。 然后我们从小到大枚举玩家 能完成的关卡数目 ,计算玩家 得到的分数和 ,如果 $t > s - t$,那么玩家 需要完成的关卡数目就是 。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 前缀和 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个长度为 n 的二进制数组 possible 。

Alice 和 Bob 正在玩一个有 n 个关卡的游戏,游戏中有一些关卡是 困难 模式,其他的关卡是 简单 模式。如果 possible[i] == 0 ,那么第 i 个关卡是 困难 模式,两个玩家 都不可能 通过。一个玩家通过一个简单模式的关卡可以获得 1 分,遇到困难模式的关卡将失去 1 分。

游戏的一开始,Alice 将从第 0 级开始 按顺序 完成一些关卡,然后 Bob 会完成剩下的所有关卡。

假设两名玩家都采取最优策略,目的是 最大化 自己的得分,Alice 想知道自己 最少 需要完成多少个关卡,才能获得比 Bob 更多的分数。

请你返回 Alice 获得比 Bob 更多的分数所需要完成的 最少 关卡数目,如果 无法 达成,那么返回 -1 。

注意,每个玩家都至少需要完成 1 个关卡。

 

示例 1:

输入:possible = [1,0,1,0]

输出:1

解释:

我们来看一下 Alice 可以完成的关卡数目:

  • 如果 Alice 只完成关卡 0 ,Bob 完成剩下的所有关卡,那么 Alice 获得 1 分,Bob 获得 -1 + 1 - 1 = -1 分。
  • 如果 Alice 完成到关卡 1 ,Bob 完成剩下的所有关卡,那么 Alice 获得 1 - 1 = 0 分,Bob 获得 1 - 1 = 0 分。
  • 如果 Alice 完成到关卡 2 ,Bob 完成剩下的所有关卡,那么 Alice 获得 1 - 1 + 1 = 1 分,Bob 获得 -1 分。

Alice 需要完成至少一个关卡获得更多的分数。

示例 2:

输入:possible = [1,1,1,1,1]

输出:3

解释:

我们来看一下 Alice 可以完成的关卡数目:

  • 如果 Alice 只完成关卡 0 ,Bob 完成剩下的所有关卡,那么 Alice 获得 1 分,Bob 获得 4 分。
  • 如果 Alice 完成到关卡 1 ,Bob 完成剩下的所有关卡,那么 Alice 获得 2 分,Bob 获得 3 分。
  • 如果 Alice 完成到关卡 2 ,Bob 完成剩下的所有关卡,那么 Alice 获得 3 分,Bob 获得 2 分。
  • 如果 Alice 完成到关卡 3 ,Bob 完成剩下的所有关卡,那么 Alice 获得 4 分,Bob 获得 1 分。

Alice 需要完成至少三个关卡获得更多的分数。

示例 3:

输入:possible = [0,0]

输出:-1

解释:

两名玩家只能各完成 1 个关卡,Alice 完成关卡 0 得到 -1 分,Bob 完成关卡 1 得到 -1 分。两名玩家得分相同,所以 Alice 无法得到更多分数。

 

提示:

  • 2 <= n == possible.length <= 105
  • possible[i] 要么是 0 要么是 1
lightbulb

解题思路

方法一:枚举

我们先计算得到两个玩家能得到的分数和,记为 ss

然后我们从小到大枚举玩家 11 能完成的关卡数目 ii,计算玩家 11 得到的分数和 tt,如果 t>stt > s - t,那么玩家 11 需要完成的关卡数目就是 ii

如果枚举完前 n1n - 1 个关卡都没有找到满足条件的 ii,那么就返回 1-1

时间复杂度 O(n)O(n),其中 nn 是数组的长度。空间复杂度 O(1)O(1)

1
2
3
4
5
6
7
8
9
10
class Solution:
    def minimumLevels(self, possible: List[int]) -> int:
        s = sum(-1 if x == 0 else 1 for x in possible)
        t = 0
        for i, x in enumerate(possible[:-1], 1):
            t += -1 if x == 0 else 1
            if t > s - t:
                return i
        return -1
speed

复杂度分析

指标
时间complexity is O(n) because each element is processed once during the transformation and prefix sum calculation. Space complexity is O(n) for storing prefix sums, though it can be optimized to O(1) using a running total instead of an array.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Look for efficient conversion of 0s to -1s to simplify net gain calculation.

  • question_mark

    Expect prefix sum usage to determine Alice's advantage quickly without nested loops.

  • question_mark

    Watch out for edge cases where all levels are impossible or Alice cannot surpass Bob.

warning

常见陷阱

外企场景
  • error

    Forgetting to convert 0s to -1s, which leads to incorrect net point computation.

  • error

    Not considering the case where Alice cannot gain more points and returning an invalid index.

  • error

    Calculating Bob's points incorrectly by not accounting for sequential play split.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Find minimum levels Alice must play when some levels have variable points instead of 1 or -1.

  • arrow_right_alt

    Determine maximum points Alice can achieve using the same prefix sum approach.

  • arrow_right_alt

    Apply the array plus prefix sum pattern to multiple players instead of just Alice and Bob.

help

常见问题

外企场景

得到更多分数的最少关卡数目题解:前缀和 | LeetCode #3096 中等