程式語言 - LeetCode - C++ - 486. Predict the Winner



題目:


方法:

我的收益 = 目前拿到 - 對手最佳收益

解答:

class Solution {
public:
    bool predictTheWinner(vector<int>& nums) {
        int n = nums.size();
        vector<vector<int>> visited(n, vector<int>(n, INT_MIN));

        auto dfs = [&](this auto&& dfs, int l , int r) {
            if (l == r) {
                return nums[l];
            }

            if (visited[l][r] != INT_MIN) {
                return visited[l][r];
            }

            int tl = nums[l] - dfs(l + 1, r);
            int tr = nums[r] - dfs(l, r - 1);
            return visited[l][r] = max(tl, tr);
        };

        return dfs(0, n - 1) >= 0;
    }
};