解题思路
首先想到用Python暴力实现,但是会超时
class Solution:
def minimumLevels(self, possible: List[int]) -> int:
n = len(possible)
# 处理possible
for i in range(n):
if possible[i] == 0: possible[i] = -1
if possible[i] == 1: possible[i] = 1
res = 0
#for i in range(n) 这里不行,不满足每个玩家至少都需要完成1个关卡
for i in range(n-1):
a = sum(possible[:(i+1)])
b = sum(possible[(i+1):])
if a > b:
res = i+1
break
return res if res > 0 else -1
前缀和思想,找到规律得的关卡总分数- Alice得分< Alice得分。
class Solution:
def minimumLevels(self, possible: List[int]) -> int:
n = len(possible)
tot = sum(possible) * 2 - n
pre = 0
for i in range(n - 1):
pre += 1 if possible[i] == 1 else -1
if 2 * pre > tot:
return i + 1
return -1