题目:
给一数组,如果存在众数,找出众数,即超过一半的数,如果不存在,返回-1.
思路:
众数:众数出现的次数大于其他所有数出现次数之和
方法1:hashmap
通过遍历数组,将数组每个数都通过hashmap来统计其出现的个数,如果某个数个数超过一半,则为众数。
时间空间复杂度均为O(n)
方法2:Moore Voting Algorithm
众数存在的情况下,每次扔掉两个不同的数,众数不变,最终剩下的数一定是众数。
- 扔掉一个众数和一个非众数,众数不变
- 扔掉两个非众数,众数不变
时间复杂度O(n),空间复杂度O(1)
代码:
#include #include #include