Top K Frequent Elements

来源:互联网 发布:网络协议分析与仿真 编辑:程序博客网 时间:2024/05/16 14:30

Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note: 

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size           
这道题目终于明白其array的含义,感觉本身就是按照频率已经排好,然后找出前K名频率的
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/* * Given a non-empty array of integers, return the k most frequent elements.For example,Given [1,1,1,2,2,3] and k = 2, return [1,2]. *给定的数组已经是按照个数排好了的 * */public class Soultion {public static void main(String[] args) {// TODO Auto-generated method stub}public List<Integer> topKFrequent(int[] nums, int k) {        Map<Integer, Integer> frequenceMap = new HashMap<>();        List<Integer>[] bucket = new List[nums.length+1];//如果大小仅仅是nums.length则会出现越界的情况,比如[1] 1        for(int num : nums)        {        if(frequenceMap.containsKey(num))        {        frequenceMap.put(num, frequenceMap.get(num)+1);        }else        frequenceMap.put(num, 1);        }        for(int key : frequenceMap.keySet())        {        int frequence = frequenceMap.get(key);        if(bucket[frequence]==null)        {        bucket[frequence] = new ArrayList<>();        }        bucket[frequence].add(key);        }        List<Integer> res = new ArrayList<>();        for(int i = bucket.length-1;i>=0&&res.size()<k;i--)//这样的话,如果是[1,1,1,2,2,3,3,4] k=2 则会输出[1,2,3]        {        if(bucket[i]!=null)        {        res.addAll(bucket[i]);        }        }        return res;    }}


0 0
原创粉丝点击