按照频率将数组升序排序(HashMap排序)
class Solution {
public int[] frequencySort(int[] nums) {
int[] res = new int[nums.length];
int index = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
// Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){
// @Override
// public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
// if(o1.getValue() == o2.getValue()){
// return o2.getKey().compareTo(o1.getKey());
// }else{
// return o1.getValue().compareTo(o2.getValue());
// }
// }
// });
Collections.sort(list, (o1, o2) -> {
if(o1.getValue() == o2.getValue()){
return o2.getKey().compareTo(o1.getKey());
}else{
return o1.getValue().compareTo(o2.getValue());
}
});
for(Map.Entry<Integer, Integer> entry : list){
for(int i = 0; i < entry.getValue(); i++){
res[index] = entry.getKey();
index++;
}
}
return res;
}
}