[LeetCode] #169 多数元素

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

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

输入:[3,2,3]

输出:3

最直接的思路就是使用map记录出现次数

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
            if(map.get(num) > nums.length / 2) return num;
        }
        return 0;
    }
}

找到超过半数的元素,我们也可以直接排列数组,中间元素必定是我们需要的多数元素

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}

从第一个数开始count=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个

cur代表当前的多数元素

count代表当前的多数元素和其他元素的数量差

class Solution {
    public int majorityElement(int[] nums) {
        int count = 0;
        Integer cur = null;
        for (int num : nums) {
            if (count == 0) cur = num;
            count += (num == cur) ? 1 : -1;
        }
        return cur;
    }
}

知识点:

getOrDefault(key,default) 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值。

总结:

posted @ 2021-08-24 14:47  1243741754  阅读(27)  评论(0编辑  收藏  举报