From 85301014bb879a33327dfa6643466c0184dd14c7 Mon Sep 17 00:00:00 2001 From: TCeason <33082201+TCeason@users.noreply.github.com> Date: Tue, 17 Nov 2020 17:56:31 +0800 Subject: [PATCH] add a cpp hash map version for stoneGame (#599) --- ...32\345\274\210\351\227\256\351\242\230.md" | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\345\212\250\346\200\201\350\247\204\345\210\222\344\271\213\345\215\232\345\274\210\351\227\256\351\242\230.md" "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\345\212\250\346\200\201\350\247\204\345\210\222\344\271\213\345\215\232\345\274\210\351\227\256\351\242\230.md" index 44246ab..f9082d8 100644 --- "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\345\212\250\346\200\201\350\247\204\345\210\222\344\271\213\345\215\232\345\274\210\351\227\256\351\242\230.md" +++ "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\345\212\250\346\200\201\350\247\204\345\210\222\344\271\213\345\215\232\345\274\210\351\227\256\351\242\230.md" @@ -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 memo; + + int dfs(vector &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& piles) { + // 最佳发挥时: + // 先手得分 * 2 > 总大小 则先手者胜利 + return dfs(piles, 0) * 2 > accumulate(begin(piles), end(piles), 0); + } +}; + +``` + -- GitLab