美文网首页
[leetcode]求众数II

[leetcode]求众数II

作者: 菜鸟瞎编 | 来源:发表于2019-06-20 21:24 被阅读0次

https://leetcode-cn.com/problems/majority-element-ii/

给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

示例 1:

输入: [3,2,3]
输出: [3]
示例 2:

输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
解法一(未验证):

因为 众数次数是 超过⌊ n/3 ⌋ ,所以不能直接用摩尔投票。
既然是n/3,那么只能有一个或两个数字是众数。这样的话,我们把数组两两一组,如果数组长度是奇数,最后一个数一组。这样总的组数是 ⌊ n/2⌋ , ⌊ n/2⌋ < 2*⌊ n/3 ⌋ 满足使用摩尔投票的条件。
根据摩尔投票的思想,先假设第一组的两个数是众数,a1,a2,初始计数值cnt1,cnt2都为1,然后遍历后面每一组。如果该组中有a1,则cnt1加1,否则减一;如果该组中有a2,则cnt2加1,否则减一。如果cnt1或cnt2减为0,就用该组的值替换(比如此时cnt1为0,该组值为[a2,x],就用x 替换a1。如果cnt1,cnt2同时为0,就用该组的两个值替换a1,a2)。遍历到最后即可。

这个解法我还没有验证,有兴趣的朋友可以验证一下。

其他解法:
[LeetCode] Majority Element II 求大多数之二

相关文章

  • [leetcode]求众数II

    https://leetcode-cn.com/problems/majority-element-ii/ 解法一...

  • 找出数组中出现次数大于N/K的所有元素

    leetcode 的求众数1 和 求众数2,然后我们可以把它泛化到K

  • 求众数 II

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majori...

  • 【LeetCode】求众数

    题目描述: 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可...

  • LeetCode-python 229.求众数 II

    题目链接难度:中等 类型: 数组 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ...

  • 229. 求众数 II

    给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(...

  • Leetcode169. 求众数

    题目 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假...

  • python-LeetCode-求众数

    题目:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设...

  • LeetCode 169.求众数

    给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是...

  • Leetcode-169:求众数

    题目描述:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 思路...

网友评论

      本文标题:[leetcode]求众数II

      本文链接:https://www.haomeiwen.com/subject/mmdsqctx.html