1. 程式人生 > 其它 >LeetCode 5611. 石子游戲 VI(貪心)

LeetCode 5611. 石子游戲 VI(貪心)

技術標籤:LeetCode

文章目錄

1. 題目

Alice 和 Bob 輪流玩一個遊戲,Alice 先手。

一堆石子裡總共有 n 個石子,輪到某個玩家時,他可以 移出 一個石子並得到這個石子的價值。
Alice 和 Bob 對石子價值有 不一樣的的評判標準

給你兩個長度為 n 的整數陣列 aliceValues 和 bobValues 。
aliceValues[i] 和 bobValues[i] 分別表示 Alice 和 Bob 認為第 i 個石子的價值。

所有石子都被取完後,得分較高的人為者。
如果兩個玩家得分相同,那麼為平局。
兩位玩家都會採用 最優策略

進行遊戲。

請你推斷遊戲的結果,用如下的方式表示:

  • 如果 Alice 贏,返回 1 。
  • 如果 Bob 贏,返回 -1 。
  • 如果遊戲平局,返回 0 。
示例 1:
輸入:aliceValues = [1,3], bobValues = [2,1]
輸出:1
解釋:
如果 Alice 拿石子 1 (下標從 0開始),那麼 Alice 可以得到 3 分。
Bob 只能選擇石子 0 ,得到 2 分。
Alice 獲勝。

示例 2:
輸入:aliceValues = [1,2], bobValues = [3,1]
輸出:0
解釋:
Alice 拿石子 0 , Bob 拿石子 1 ,他們得分都為 1 分。
打平。

示例 3
: 輸入:aliceValues = [2,4,3], bobValues = [1,6,7] 輸出:-1 解釋: 不管 Alice 怎麼操作,Bob 都可以得到比 Alice 更高的得分。 比方說,Alice 拿石子 1 ,Bob 拿石子 2 , Alice 拿石子 0 , Alice 會得到 6 分而 Bob 得分為 7 分。 Bob 會獲勝。 提示: n == aliceValues.length == bobValues.length 1 <= n <= 10^5 1 <= aliceValues[i], bobValues[i] <= 100

來源:力扣(LeetCode) 連結:

https://leetcode-cn.com/problems/stone-game-vi
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

2. 解題

  • 貪心,沒有證明,蒙過去的,兩者的和相加,大的優先拿走
class Solution {
public:
    int stoneGameVI(vector<int>& aliceValues, vector<int>& bobValues) {
        int n = aliceValues.size();
        vector<pair<int, int>> delta(n);
        for(int i = 0; i < n; i++) 
        {
            delta[i].first = aliceValues[i]+bobValues[i];//和大的優先
            delta[i].second = i;
        }
        sort(delta.rbegin(), delta.rend());//和大的優先
        int a = 0, b = 0;
        bool alice = true;
        for(int i = 0; i < n; ++i)
        {
            if(alice)
                a += aliceValues[delta[i].second];
            else
                b += bobValues[delta[i].second];
            alice = !alice;
        }
        if(a > b) return 1;
        else if(a < b) return -1;
        return 0;
    }
};

816 ms 105.4 MB C++


我的CSDN部落格地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
Michael阿明