Leetcode:169. 多数元素

多数元素

题目描述

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例

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

思路

思路1:hash

使用hash表存储<num, numCount>数与数出现次数,如果数超过⌊ n/2 ⌋,则该数为众数

思路2: Boyer-Moore 投票算法

直接使用计数标记,记录好候选的最多元素,然后因为多数元素超过一半,所以可以不断使用count计数完成候选元素替换、增加、减小。

代码

思路2

public class Solution &#123;
    public int majorityElement(int[] nums)&#123;
        int result = nums[0];
        int count = 1;
        for(int i = 1; i < nums.length; i++)&#123;
            if (nums[i] == result)&#123;
                count ++;
            &#125; else&#123;
                count --;
                if (count == 0)&#123;
                    result = nums[i];
                    count = 1;
                &#125;
            &#125;
        &#125;
        return result;
    &#125;
&#125;

复杂度分析

时间复杂度

思路1和思路2都是n

空间复杂度

思路1会额外有n的字典,思路2不占用新的空间


文章作者: 小风雷
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小风雷 !
评论
 上一篇
Leetcode 887:鸡蛋掉落 Leetcode 887:鸡蛋掉落
Leetcode 887:鸡蛋掉落题目描述你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N  共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 <= F
2020-03-09
下一篇 
Leetcode 240:搜索二维矩阵II Leetcode 240:搜索二维矩阵II
搜索二维矩阵II题目描述编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例现有矩阵 matrix 如下:
2020-03-05
  目录