1686. Stone Game VI

T: O(nlogn)
S: O(n)
```java
class Solution {
    class Value {
        int sum;
        int index;
        Value(int sum, int index) {
            this.sum = sum;
            this.index = index;
        }
    }
    public int stoneGameVI(int[] aliceValues, int[] bobValues) {
        int n = aliceValues.length;
        List<Value> sum = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            sum.add(new Value(aliceValues[i] + bobValues[i], i));
        }
        Collections.sort(sum, (a, b) -> b.sum - a.sum);
        int alicePoints = 0;
        int bobPoints = 0;
        for (int i = 0; i < n; i++) {
            int index = sum.get(i).index;
            if (i % 2 == 0) {
                alicePoints += aliceValues[index];
            } else {
                bobPoints += bobValues[index];
            }
        }
        if (alicePoints == bobPoints) {
            return 0;
        }
        return alicePoints >  bobPoints ? 1 : -1;
    }
}

/**
從 ex2 可以觀察到, 不是取自身最大的開始, 就可以獲勝

ex2 a= [1,2] b=[3,1]
若 a 取 2, b 就可以取 3 -> b贏
其實最佳解是 a 取 1, b只能取 1 -> 平手
所以想要找到對 a 最好的選擇, 不能只貪心的看 a 的最大
還得考慮到 b 的值

如何考慮到 b 的值呢? 那就是相加
相加後可以看到 變成: [4, 3]
如此就可以發現 當 a 選 1 時, 還讓 b 錯失了+3 的機會也就可以說是 a+3 ! 所以 a 的收益就會變相是 4! 
所以優先選 a 的 index 0 是比較好的

T: O(nlogn)
S: O(n)
 */
```

Last updated