2660-保龄球游戏的获胜者

Raphael Liu Lv10

给你两个下标从 0 开始的整数数组 player1player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。

保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10

假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:

  • 如果玩家在该轮的前两轮的任何一轮中击中了 10 个瓶子,则为 2xi
  • 否则,为 xi

玩家的得分是其 n 轮价值的总和。

返回

  • 如果玩家 1 的得分高于玩家 2 的得分,则为 1
  • 如果玩家 2 的得分高于玩家 1 的得分,则为 2
  • 如果平局,则为 0

示例 1:

**输入:** player1 = [4,10,7,9], player2 = [6,5,2,3]
**输出:** 1
**解释:** player1 的得分是 4 + 10 + 2*7 + 2*9 = 46 。
player2 的得分是 6 + 5 + 2 + 3 = 16 。
player1 的得分高于 player2 的得分,所以 play1 在比赛中获胜,答案为 1 。

示例 2:

**输入:** player1 = [3,5,7,6], player2 = [8,10,10,2]
**输出:** 2
**解释:** player1 的得分是 3 + 5 + 7 + 6 = 21 。
player2 的得分是 8 + 10 + 2*10 + 2*2 = 42 。
player2 的得分高于 player1 的得分,所以 play2 在比赛中获胜,答案为 2 。

示例 3:

**输入:** player1 = [2,3], player2 = [4,1]
**输出:** 0
**解释:** player1 的得分是 2 + 3 = 5 。
player2 的得分是 4 + 1 = 5 。
player1 的得分等于 player2 的得分,所以这一场比赛平局,答案为 0 。

提示:

  • n == player1.length == player2.length
  • 1 <= n <= 1000
  • 0 <= player1[i], player2[i] <= 10

下午两点【biIibiIi@灵茶山艾府】 直播讲题,记得关注哦~

[sol1-Python3]
1
2
3
4
5
6
7
8
9
10
11
12
def score(a: List[int]) -> int:
res = 0
for i, x in enumerate(a):
if i and a[i - 1] == 10 or i > 1 and a[i - 2] == 10:
x *= 2
res += x
return res

class Solution:
def isWinner(self, player1: List[int], player2: List[int]) -> int:
s1, s2 = score(player1), score(player2)
return 1 if s1 > s2 else 2 if s1 < s2 else 0
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func score(a []int) (res int) {
for i, x := range a {
if i > 0 && a[i-1] == 10 || i > 1 && a[i-2] == 10 {
x *= 2
}
res += x
}
return
}

func isWinner(player1, player2 []int) int {
s1, s2 := score(player1), score(player2)
if s1 > s2 {
return 1
}
if s1 < s2 {
return 2
}
return 0
}

复杂度分析

  • 时间复杂度:\mathcal{O}(n),其中 n 为 player}_1 的长度。
  • 空间复杂度:\mathcal{O}(1)。仅用到若干额外变量。
 Comments
On this page
2660-保龄球游戏的获胜者