【力扣每日一题】力扣1686石子游戏VI

题目来源

力扣1686石子游戏VI

题目概述

Alice 和 Bob 轮流玩一个游戏,Alice 先手。

一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。

给你两个长度为 n 的整数数组 aliceValues 和 bobValues 。aliceValues[i] 和 bobValues[i] 分别表示 Alice 和 Bob 认为第 i 个石子的价值。

所有石子都被取完后,得分较高的人为胜者。如果两个玩家得分相同,那么为平局。两位玩家都会采用 最优策略 进行游戏。

请你推断游戏的结果,用如下的方式表示:

如果 Alice 赢,返回 1 。 如果 Bob 赢,返回 -1 。 如果游戏平局,返回 0 。

思路分析

每次取石子的时候,不但会让自己得分,也会让对方无法获得这个石头的分数,也就是让自己相比于对方多获得了aliceValues[i] + bobValues[i]的分数。

代码实现

java实现

public class Solution {
    public int stoneGameVI(int[] aliceValues, int[] bobValues) {
        int[][] sum = new int[aliceValues.length][3];
        for (int i = 0; i < aliceValues.length; i++) {
            sum[i][0] = aliceValues[i] + bobValues[i];
            sum[i][1] = aliceValues[i];
            sum[i][2] = bobValues[i];
        }
        Arrays.sort(sum, (a,b) -> b[0] - a[0]);
        int aliceScore = 0;
        int bobScore = 0;
        for (int i = 0; i < aliceValues.length; i++) {
            if ((i & 1) == 1) {
                bobScore += sum[i][2];
            }else {
                aliceScore += sum[i][1];
            }
        }
        int temp = aliceScore - bobScore;
        if (temp == 0) {
            return temp;
        }else {
            return temp > 0 ? 1 : -1;
        }
    }
}

c++实现

class Solution {

public:
    int stoneGameVI(vector& aliceValues, vector& bobValues) {
        vector> sum = vector>(aliceValues.size());
        for (int i = 0; i < aliceValues.size(); i++) {
            sum[i].push_back(aliceValues[i] + bobValues[i]);
            sum[i].push_back(aliceValues[i]);
            sum[i].push_back(bobValues[i]);
        }
        sort(sum.begin(), sum.end(), [](const vector& a, const vector& b) {
            return a[0] > b[0];
            });
        int aliceScore = 0;
        int bobScore = 0;
        for (int i = 0; i < aliceValues.size(); i++) {
            if ((i & 1) == 1) {
                bobScore += sum[i][2];
            }
            else {
                aliceScore += sum[i][1];
            }
        }
        int temp = aliceScore - bobScore;
        if (temp == 0) {
            return temp;
        }
        else {
            return temp > 0 ? 1 : -1;
        }
    }
};

你可能感兴趣的:(leetcode,算法,java,c++)