数据结构和算法分析数据结构与算法

Leetcode-347 前 K 个高频元素

2021-10-24  本文已影响0人  itbird01

347. 前 K 个高频元素

解题思路

1.遍历nums,将nums中数据和对应出现次数,存储于map中,key为nums[i],value为其出现的次数
2.将map转为list,按照value进行排序
3.取list数组前k个元素

解题遇到的问题

后续需要总结学习的知识点

1.map、set相关对比、总结
2.从多个方面,包含是否可以存储空置、底层实现数据结构异同、线程是否同步、查找和插入效率、容量扩充方式、初始容量、特性

##解法1
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        // 遍历nums,将nums中数据和对应出现次数,存储于map中,key为nums[i],value为其出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i])) {
                map.put(nums[i], map.get(nums[i]) + 1);
            } else {
                map.put(nums[i], 1);
            }
        }
        //将map转为list,按照value进行排序
        List<Entry<Integer, Integer>> list = new ArrayList<>();
        Iterator<Entry<Integer, Integer>> iterator = map.entrySet()
                .iterator();
        while (iterator.hasNext() ) {
            list.add(iterator.next());
        }
        
        Collections.sort(list,new Comparator<Entry<Integer, Integer>>() {

            @Override
            public int compare(Entry<Integer, Integer> o1,
                    Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        
        //取list数组前k个元素
        int[] result = new int[k];
        for (int i = 0; i < k; i++) {
            result[i] = list.get(i).getKey();
        }
        return result;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读