数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000
题解 思路
因为 数字的个数超过一半
以五个数为例
[1,1,1,2,3]
不论是
[1,1,1,2,3]
[1,1,2,1,3]
[1,2,1,3,1]
都能保证 t 保存的是数量超过一半的数的
因为count 等于零的时候才改变赋值
只有第一次或者前面两个数 不一样时才会count等于0
因为 需要求的数比总数的一半还多
就算一 一抵消 最后保留的还会是想要的数
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int count = 0;
int t = array[0];
for (int num : array) {
if (count == 0) t = num;
count += num == t ? 1 : -1;
System.out.print(count);
}
return t;
}
}