记一种别人写的代码,和我的代码
我的代码如下:
public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
int length = nums.length;
List<Integer> result = new ArrayList<Integer>();
Map<Integer,Integer> hash = new HashMap<Integer,Integer>();
for(int i = 0 ;i < length;i++){
if(hash.containsKey(nums[i])){
hash.put(nums[i],hash.get(nums[i]) + 1);
}else{
hash.put(nums[i],1);
}
}
for(int i = 0;i < k;i++){
int Max = getMaxInMap(hash);
result.add(Max);
hash.remove(Max);
}
return result ;
}
private int getMaxInMap(Map<Integer,Integer> m){
int Max = Integer.MIN_VALUE;
for (Map.Entry<Integer, Integer> entry : m.entrySet()) {
if(Max == Integer.MIN_VALUE){
Max = entry.getKey();
}else if(entry.getValue() > m.get(Max)){
Max = entry.getKey();
}
}
return Max;
}
}
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer>[] bucket = new List[nums.length + 1];
Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>();
for (int n : nums) {
frequencyMap.put(n, frequencyMap.getOrDefault(n, 0) + 1);
}
for (int key : frequencyMap.keySet()) {
int frequency = frequencyMap.get(key);
if (bucket[frequency] == null) {
bucket[frequency] = new ArrayList<>();
}
bucket[frequency].add(key);
}
List<Integer> res = new ArrayList<>();
for (int pos = bucket.length - 1; pos >= 0 && res.size() < k; pos--) {
if (bucket[pos] != null) {
res.addAll(bucket[pos]);
}
}
return res;
}
2016/12/22