LeetCode -[简单]-169. 求众数-Java实现

题目描述:

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

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

示例 1:

输入:[3,2,3]

输出:[3]

思路一:

利用哈希表的映射,储存数组中的数字以及它们出现的次数,当众数出现时,返回这个数字。

代码:

class Solution {
    public int majorityElement(int[] nums) {
        
        Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
        int n = nums.length;
        
        for(int num : nums)   //统计每个元素出现的次数
        {
            Integer count = map.get(num);
            if(count == null) 
                count =1;
            else
                count++;
            map.put(num,count);
            
            if(map.get(num) > n/2)
                return num;
        }
        
        return 0;
    }
}

思路二:

众数一定是出现次数大于n/2的元素,所以讲数组进行排列后,取中间值,就一定是众数。但是在计算比较大的数组时,时间会超过限制。

代码:

class Solution {
    public int majorityElement(int[] nums) {
        
        int n = nums.length;
        
        for(int i = 0 ;i< n;i++)
        {
            for(int j=0 ;j < n ;j++)
            {
                if(nums[i] > nums[j])
                {
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
        }
        
        return nums[n/2];
    }
}

点赞