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;
}
}