我正在尝试使用
Java 8重写
Moore’s Voting Algorithm的实现来查找数组中的Majority元素.
Java 7实现将是这样的:
public int findCandidate(int[] nums) {
int maj_index = 0, count = 1;
for(int i=1; i
if(count==0){
count++;
maj_index=i;
}else if(nums[maj_index]==nums[i]){
count++;
} else {
count--;
}
}
return nums[maj_index];
}
我能想到的方法是使用stream reduce来获得最终结果
public int findCandidate(int[] nums) {
int count = 1;
Arrays
.asList(nums)
.stream()
.reduce(0, (result, cur) -> {
if (count == 0) {
result = cur;
count++;
} else if (result == cur){
count++;
} else {
count --;
}
});
return result;
}
但是这个方法有编译错误,而且它也打破了函数纯粹主义者,我多次遇到这种情况,那么处理lambda表达式中的全局变量的最佳方法是什么.