229. 求众数 II
难度中等443
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋
次的元素。
示例 1:
1 | 输入:[3,2,3] |
示例 2:
1 | 输入:nums = [1] |
示例 3:
1 | 输入:[1,1,1,3,3,2,2,2] |
提示:
1 <= nums.length <= 5 * 10^4
-10^9 <= nums[i] <= 10^9
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。
摩尔投票
求数量大于 n/3下取整的数组元素,由题意可知,结果最多有两个数字。
使用两个变量维护元素,两个变量维护计数器。
如果第一个计数器大于0遍历到的元素和第一个元素相同,那么第一个计数器自增
如果第二个计数器大于0遍历到的元素和第二个元素相同,那么第二个计数器自增
如果第一个计数器等于0,那么设置当前的数字为element1
如果第二个计数器等于0,那么设置当前的数字为element2
如果遍历到的元素和第一个第二个都不相同,那么两个计数器都自减
1 | class Solution { |