剑指 Offer 39. 数组中出现次数超过一半的数字
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
解答
class Solution {
/**
声明一个寄存器和一个计数器
寄存器记录当前计数器大于0时记录的数字,当计数器等于0时就换成当前遍历到的数字
计数器会根据寄存器中存的数字和扫描到的数组进行加减操作
如果两数字相等,计数器+1
如果不行相等时,计数器-1
*/
public int majorityElement(int[] nums) {
int register,count;
count = 1;
register = nums[0];
for(int i = 1;i < nums.length;i++){
if(register == nums[i]){
count++;
}else{
count--;
}
if(count == 0){
register = nums[i];
count++;
}
}
return register;
}
}