Skip to main content
  1. Posts/

LeetCode-1686 石子游戏 VI

·1 min·

LeetCode-1686 石子游戏 VI #

Solution 1 #

考虑 Alice 的两个选择 $i, j$ . 选 $i$ 的分差是 $a_i - b_j$ , 选 $j$ 的代价是 $a_j - b_i$ , 当 $a_i - b_j > a_j - b_i$ 时应该选 $i$ , 因此按 $a_i + b_i$ 排序, 双方轮流选择总价值最大的, 同时获取自己那部分分数.

代码如下:

class Solution:
    def stoneGameVI(self, aliceValues: List[int], bobValues: List[int]) -> int:
        values = [(idx, a + b) for idx, (a, b) in enumerate(zip(aliceValues, bobValues))]
        values.sort(key=lambda x: -x[1])
        print(values)
        s_a = s_b = 0
        for i, (idx, _) in enumerate(values):
            if i & 1:
                s_b += bobValues[idx]
            else:
                s_a += aliceValues[idx]
        return 1 if s_a > s_b else (0 if s_a == s_b else -1)