题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
解题思路
这题很简单, 最简单的方法是用hashmap然后获取最大的那个就可以,或者排序后去中间的index也可以,这里介绍的是K神的投票法, 首先我们可以知道的是一定有个数字是大于一半的, 那么我们随机取数+1,如果下一位相等则+1,不相等则-1,碰到0,下一位取新的数字+1, 这样一路下去,两两相抵,最后剩下的一定是超过数组长度一般的数字。
Java代码实现
class Solution {
public int majorityElement(int[] nums) {
int res = nums[0];
int sum = 1;
for (int i = 1; i < nums.length; i++) {
if(res != nums[i]){
sum -= 1;
}else{
sum ++;
}
if(sum ==0){
res = nums[i];
sum = 1;
}
}
return res;
}
}