地址
题目
给你一个长度为 n 的二进制数组 possible 。
Alice 和 Bob 正在玩一个有 n 个关卡的游戏,游戏中有一些关卡是 困难 模式,其他的关卡是 简单 模式。如果 possible[i] == 0 ,那么第 i 个关卡是 困难 模式。一个玩家通过一个简单模式的关卡可以获得 1 分,通过困难模式的关卡将失去 1 分。
游戏的一开始,Alice 将从第 0 级开始 按顺序 完成一些关卡,然后 Bob 会完成剩下的所有关卡。
假设两名玩家都采取最优策略,目的是 最大化 自己的得分,Alice 想知道自己 最少 需要完成多少个关卡,才能获得比 Bob 更多的分数。
请你返回 Alice 获得比 Bob 更多的分数所需要完成的 最少 关卡数目,如果 无法 达成,那么返回 -1 。
注意,每个玩家都至少需要完成 1 个关卡。
思路
将数组中所有的 0 转化为 1 并且求和为 Bob 的分数,再次遍历数组计算 Alice 的分数和 Bob 的分数,如果 Alice 的分数 > Bob 的分数就返回索引 +1(因为要求是过关的次数所以需要 +1 ),如果不符合就返回 -1 ;
代码
class Solution {
public int minimumLevels(int[] possible) {
int sum = 0;
for (int i = 0; i < possible.length; i++) {
if (possible[i] == 0) {
possible[i] = -1;
}
sum += possible[i];
}
int alice = 0;
for (int i = 0; i < possible.length; i++) {
alice += possible[i];
sum -= possible[i];
if (alice > sum && i != possible.length - 1) {
return i + 1;
}
}
return -1;
}
}