JZ39 数组中出现次数超过一半的数字
JZ39 数组中出现次数超过一半的数字
描述
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组$[1,2,3,2,2,2,5,4,2]$。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围:$n≤50000$,数组中元素的值 $0≤val≤10000$
要求:空间复杂度:$O(1)$,时间复杂度 $O(n)$
输入描述:
保证数组输入非空,且保证有解
示例1
1 | 输入:[1,2,3,2,2,2,5,4,2] |
示例2
1 | 输入:[3,3,3,3,2,2,2] |
示例3
1 | 输入:[1] |
题解
首先是直接创建字典,存每一个数字出现的频率,超过一半时直接返回,或者排序后找中间的数字(一定有解)。
官方给出了一个候选人法:
1 | 既然一定有解,那么众数一定大于数组长度的一半。 |
1 | # |