[LintCode]硬币排成线 II

来源:互联网 发布:画眉鸟欧阳修知的意思 编辑:程序博客网 时间:2024/06/05 09:24

http://www.lintcode.com/zh-cn/problem/coins-in-a-line-ii/

两人依次从左边取1~2个硬币,问第一个人取到的硬币值是否更大





从后向前遍历,因为第一个硬币一定会被取到。one保存当前硬币被取到,two表示当前以及他后面的一个硬币被取到,zero表示当前硬币没有被取到。res1表示res[i + 1],res2表示res[i + 2]

public class Solution {    /**     * @param values: an array of integers     * @return: a boolean which equals to true if the first player will win     */    public boolean firstWillWin(int[] values) {        // write your code here        if (values == null || values.length == 0) {            return false;        }        int n = values.length;        long zero = 0;        long one = values[n - 1];        long two = values[n - 1];        long res1 = values[n - 1];        long res2 = 0;        long sum = values[n - 1];        for (int i = n - 2; i >= 0; i--) {            long tempOne = one;            long tempTwo = two;            one = zero + values[i];            two = tempOne + values[i];            zero = Math.min(res1, res2);            res2 = res1;            res1 = Math.max(one, two);            sum += values[i];        }        return res1 * 2 > sum;    }}


0 0
原创粉丝点击