LeetCode 5611. 石子游戲 VI(貪心)
阿新 • • 發佈:2020-12-13
技術標籤: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阿明),一起加油、一起學習進步!