leetcode-1686石子游戏

题目链接

1686. 石子游戏 VI - 力扣(LeetCode)

解题思路

选取石头的最优化的策略是,让自己的分最高,同时让对手失分最多。因此,我们创建一个数组vals,其中vals[i] = (aliceValues[i] + bobValues[i],i),表示第i个石头的总价值和编号,然后我们对vals按照总价值降序排序。

然后我们按照vals的顺序,让Alice和Bob交替选取石头。Alice选取vals中的偶数位置的石头,Bob选取vals中奇数位置的石头。最后比较Alice和Bob的得分,返回对应的结果。

解题代码

class Solution:
    def stoneGameVI(self, aliceValues: List[int], bobValues: List[int]) -> int:
        vals = [(a + b, i) for i, (a, b) in enumerate(zip(aliceValues, bobValues))]
        vals.sort(reverse=True)
        a = sum(aliceValues[i] for _, i in vals[::2])
        b = sum(bobValues[i] for _, i in vals[1::2])
        if a > b:
            return 1
        if a < b:
            return -1
        return 0

你可能感兴趣的:(leetcode,游戏,算法)