给你两个下标从 0 开始的整数数组 player1
和 player2
,分别表示玩家 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 。
难点:三元运算符,如何判断前两轮是否有10并实现累加乘2(利用布尔值列表)
class Solution(object):
def isWinner(self, player1, player2):
n1 = len(player1)
n2 = len(player2)
score1 = 0
score2 = 0
# 跟踪玩家1前两轮是否击中了10个瓶子
prev_10_p1 = [False, False]
#prev_10_p1是一个长度为2的布尔值列表
#prev_10_p1[0]表示上一轮(i-1)是否击中10个瓶子
#prev_10_p1[1]则表示上上一轮(i-2)是否击中10个瓶子
# 跟踪玩家2前两轮是否击中了10个瓶子
prev_10_p2 = [False, False]
for i in range(n1):
if player1[i] == 10:
# 更新玩家1前两轮的状态
prev_10_p1[0]=True
score1 += 2 * player1[i] if any(prev_10_p1) else player1[i]
#如果prev_10_p1中有一个为true,就+=2 * player1[i],否则就+=player1[i]
else:
score1 += player1[i]#容易漏写
# 更新玩家1前两轮的状态(因为本轮没有击中10分)
prev_10_p1[1] = prev_10_p1[0]
#这一行将prev_10_p1[0](即上一轮是否击中了10个瓶子)的值赋给prev_10_p1[1](即上上一轮是否击中了10个瓶子)。
# 这是因为现在轮次已经推进到下一轮,所以上一轮的状态(prev_10_p1[0])就变成了上上一轮的状态。
prev_10_p1[0] = False#这两行不太懂
#这一行将prev_10_p1[0](即当前轮的上一轮,也就是刚刚过去的这一轮)设置为False,因为当前轮玩家没有击中10个瓶子。
for i in range(n2):
if player2[i] == 10:
# 更新玩家2前两轮的状态
prev_10_p2 = [True, False]
score2 += 2 * player2[i] if any(prev_10_p2) else player2[i]
else:
score2 += player2[i]
# 更新玩家2前两轮的状态(因为本轮没有击中10分)
prev_10_p2[1] = prev_10_p2[0]
prev_10_p2[0] = False
# 比较两个玩家的得分
if score1 > score2:
return 1
elif score1 < score2:
return 2
else:
return 0
solution = Solution()
players1 = [10,1,5,6]
players2 = [6,10,4,4]
print(solution.isWinner(players1, players2)) # 应该输出 2,因为player2的得分更高
输出结果为:2
三元运算符
语法:value_if_true if condition else value_if_false
这里的condition是一个布尔表达式,value_if_true和value_if_false是两个可能的结果值。
当condition为True时,表达式的结果为value_if_true;当condition为False时,表达式的结果为value_if_false。
number=3
result="Positive"if number>4 else "Non_Positive"
print(result)