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 are 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.
Public classSolution { PublicList<integer> Topkfrequent (int[] Nums,intk) {//count the frequency for each elementHashmap<integer, integer> map =NewHashmap<integer, integer>(); for(intnum:nums) { if(Map.containskey (num)) {map.put (num, map.get (num)+1); }Else{map.put (num,1); } } //get the Max frequency intMax = 0; for(Map.entry<integer, integer>Entry:map.entrySet ()) {Max=Math.max (Max, Entry.getvalue ()); } //initialize an array of ArrayList. Index was frequency, value is list of numbersArraylist<integer>[] arr = (arraylist<integer>[])NewArraylist[max+1]; for(intI=1; i<=max; i++) {Arr[i]=NewArraylist<integer>(); } for(Map.entry<integer, integer>Entry:map.entrySet ()) { intCount =Entry.getvalue (); intNumber =Entry.getkey (); Arr[count].add (number); } List<Integer> result =NewArraylist<integer>(); //Add most frequent numbers to result for(intJ=max; j>=1; j--){ if(Arr[j].size () >0){ for(intA:arr[j]) {Result.add (a); } } if(result.size () = =k) Break; } returnresult;}}
Reference
http://www.programcreek.com/2014/05/leetcode-top-k-frequent-elements-java/
*top K Frequent Elements