力扣每日一题

给你两个下标从 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)

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值