题目
Given an integer array of size n, find all elements that appear more
than? n/3 ?
times. The algorithm should run in linear time and in
O(1) space.
相似题目及多数投票算法
第一眼看到这个题,相信许多人都恩给你联想到另一个题目:
给定一个整数数组,找出出现次数大于 n/2 的那个数。
如果是找出出现次数大于n/2的数,解决这个问题的思路并不难,可以用Map扫描一遍,并且统计出现次数。但是这种方法的时间复杂度虽然是O(N),空间复杂度也相应的是O(N)。还有一种方法是多数投票算法,算法的名字虽然没听说过,但是思路相信大多数人还是知道的。
- 如果count==0,则将now的值设置为数组的当前元素,将count赋值为1;
- 反之,如果now和现在数组元素值相同,则count++,反之count–;
- 重复上述两步,直到扫描完数组。