50
社区成员
发帖
与我相关
我的任务
分享给 定一个 int 数组,统计数组中每个数字出现的次数,并按数字出现的次数进行排序(从大到小),将结果以 Map 返回,其中 key 为数字出现的次数,value 为出现过 key 次的所有数字集合(从小到大排序)。
import java.util.*;
public class Solution {
public Map<Integer, List<Integer>> orderByFrequency(int[] nums) {
// write your code here
//获取每个数字出现的次数,并放入默认升序key的TreeMap中,key为数字,value为出现次数。
Map<Integer, Integer> treemap = new TreeMap<>();
for(int num : nums) {
Integer frequency = treemap.get(num);
frequency = null==frequency ? 1 : frequency+1;
treemap.put(num, frequency);
}
Iterator itr = treemap.keySet().iterator();
//创建降序key的TreeMap
Map<Integer, List<Integer>> result = new TreeMap<>(new Comparator<Integer>(){
@Override
public int compare(Integer a, Integer b) {
return b.compareTo(a);
}
});
//循环treemap,将value(出现次数)放入到result的key中,将key(数字)放入到result的value中。
while(itr.hasNext()) {
Integer key = (Integer)itr.next();
Integer value = treemap.get(key);
List<Integer> res = result.get(value);
if(null == res) {
res = new ArrayList<>();
result.put(value, res);
}
res.add(key);
}
return result;
}
}
import java.lang.reflect.*;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String in = sc.nextLine();
String[] str = in.replace("[", "").replace("]", "").trim().split(",");
int[] nums = new int[str.length];
for (int i = 0; i < str.length; i++) {
try {
nums[i] = Integer.parseInt(str[i].trim());
} catch (Exception e) {
nums[i] = 0;
}
}
Solution solution = new Solution();
System.out.println(solution.orderByFrequency(nums));
sc.close();
}
}