mirror of
https://github.com/labuladong/fucking-algorithm.git
synced 2025-07-05 03:36:39 +08:00
add a cpp hash map version for stoneGame (#599)
This commit is contained in:
@ -221,7 +221,7 @@ int stoneGame(int[] piles) {
|
||||
|
||||
|
||||
|
||||
python3版本
|
||||
* python3版本
|
||||
|
||||
由[SCUHZS](https://github.com/brucecat)提供
|
||||
|
||||
@ -287,3 +287,44 @@ class Solution:
|
||||
|
||||
```
|
||||
|
||||
* C++ 版本
|
||||
|
||||
由 [TCeason](https://github.com/TCeason) 提供
|
||||
|
||||
这里采用 hash map 来解决问题
|
||||
|
||||
```cpp
|
||||
class Solution {
|
||||
public:
|
||||
unordered_map<int, int> memo;
|
||||
|
||||
int dfs(vector<int> &piles, int index) {
|
||||
// 从两边向中间获取
|
||||
// index 值为 1/2 piles.size() 时可以停止算法
|
||||
if (index == piles.size() / 2)
|
||||
return 0;
|
||||
|
||||
// 减少计算,快速返回已有结果
|
||||
if (memo.count(index))
|
||||
return memo[index];
|
||||
|
||||
// 防止第一次取最右时越界
|
||||
int n = piles.size() - 1;
|
||||
|
||||
// 先手选择最左边或最右边后的分数
|
||||
int l = piles[index] + dfs(piles, index + 1);
|
||||
int r = piles[n - index] + dfs(piles, index + 1);
|
||||
|
||||
// 返回先手左或右边的最高分
|
||||
return memo[index] = max(l, r);
|
||||
}
|
||||
|
||||
bool stoneGame(vector<int>& piles) {
|
||||
// 最佳发挥时:
|
||||
// 先手得分 * 2 > 总大小 则先手者胜利
|
||||
return dfs(piles, 0) * 2 > accumulate(begin(piles), end(piles), 0);
|
||||
}
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
|
Reference in New Issue
Block a user