Leetcode-347 前 K 个高频元素

作者: itbird01 | 来源:发表于2021-10-24 07:27 被阅读0次

    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;
        }
    }
    
    

    相关文章

      网友评论

        本文标题:Leetcode-347 前 K 个高频元素

        本文链接:https://www.haomeiwen.com/subject/etpaoltx.html