LintCode 395. 硬币排成线 II JavaScript算法

描述

有 n 个不同价值的硬币排成一条线。两个参赛者轮流从 左边 依次拿走 1 或 2 个硬币,直到没有硬币为止。计算两个人分别拿到的硬币总价值,价值高的人获胜。

请判定 先手玩家 必胜还是必败?

若必胜, 返回 true, 否则返回 false.

样例

- 样例 1:

输入: [1, 2, 2]
输出: true
解释: 先手玩家直接拿走两颗硬币即可.

- 样例 2:

输入: [1, 2, 4]
输出: false
解释: 无论先手拿一个还是两个, 后手可以拿完, 然后总价值更高.

解析

firstWillWin = function (values) {
    
    
    n = values.length;
    f = [];
    f[n] = 0; // 0 coins left 
    f[n - 1] = values[n - 1]; // only last coin left 
    for (i = n - 2; i >= 0; i--){
    
    
        f[i] = Math.max(values[i] - f[i + 1], values[i] + values[i + 1] - f[i + 2]);
    }
    return f[0] >=0;
}

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SmallTeddy/article/details/108614845