力扣229.多数元素II(java Hash表解法)

题目描述:

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

力扣229.多数元素II(java Hash表解法)_第1张图片

解题思路及代码:

本题目若利用HashMap进行统计求解是一个较基础的解法(另一种可将空间复杂度优化为O(1)的解法叫做摩尔投票法(暂时还在学习中,感兴趣的小伙伴可以去看力扣官方解答))

1.遍历数组,以其元素作为键,其出现的次数作为值
2.遍历Map集合将出现次数大于数组长度三分之一的键加入List集合

代码:

class Solution {
    //HashMap
    //Tiem Complexity: O(N)
    //Space Complexity: O(1)
    public List<Integer> majorityElement(int[] nums) {
        Map<Integer, Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        int len = nums.length / 3;
        for (int num : nums) {
            if (!map.containsKey(num)) {
                map.put(num, 1);
            } else {
                map.put(num,map.get(num) + 1);
            }
        }
        for (int key : map.keySet()) {
            if (map.get(key) > len) {
                list.add(key);
            }
        }
        return list;
    }
}

操作学习:

上述代码中的集合统计操作在刷题中经常会用到,需要熟悉掌握!!!

你可能感兴趣的:(力扣题目,leetcode,哈希算法,算法)