TopK高频重复 算法题

Posted go大鸡腿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TopK高频重复 算法题相关的知识,希望对你有一定的参考价值。

文章目录

前言

最近广州某大厂面,笔试也有算法,惊了~
题目就是找出2G数据里头,重复最多的前100个,虚拟机只有1G内存

解法

1.首先是分治法
因为内存不够,就1G1G来算咯,然后再将结果进行合并即可。

2.就是一个TopK 的问题,可以采用堆

3.重复次数最多
需要用map来记录key对应出现的次数有多少

代码

public static void main(String[] args) {
        /*PriorityQueue<Integer> queue = new PriorityQueue();
        queue.add(2);
        queue.add(1);
        queue.add(3);
        queue.add(2);
        while (queue.size()!=0){
            System.out.println(queue.poll());
        }*/

        Comparator<Key> comparator = (o1, o2) -> o2.value-o1.value;
        PriorityQueue<Key> queue1 = new PriorityQueue<>(comparator);
        Map<String,Integer> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("a");
        while (list.size()!=0){
            String value = list.remove(0);
            Integer mValue = map.get(value);
            if(null == mValue){
                map.put(value,1);
            }else {
                map.put(value,mValue+1);
            }
        }
        for(Map.Entry<String,Integer> entry:map.entrySet()){
            System.out.println(entry.getKey()+" "+entry.getValue());
            queue1.add(new Key(entry.getKey(),entry.getValue()));
        }
        System.out.println(queue1.poll());
    }
    @Data
    static
    class Key{
        private String name;
        private Integer value;

        public Key(String name, Integer value) {
            this.name = name;
            this.value = value;
        }
    }

以上是关于TopK高频重复 算法题的主要内容,如果未能解决你的问题,请参考以下文章

TopK问题,腾讯面试题:有100W个战斗力,取前100名的算法。

字节跳动高频算法题TOP100

字节跳动高频算法题TOP100

字节跳动高频算法题TOP100

算法面试手撕代码高频题汇集

快速串讲校招高频面试题——排序算法和复杂度