找出目标数组中重复出现次数最少的两个数,求一个好点的思路,考虑效率问题
目前我的思路是:
int[] target = {7, 9, 8, 7, 8, 9, 7, 8, 8, 4, 9, 8, 3, 4, 2, 3, 1, 1, 1, 2, 1};
//声明 map 容器
Map<Integer, Integer> maps = new TreeMap<>();
for (int i = 0; i < target.length; i++) {
int value = target[i];
//判断该值在 map 里面是否存在
if (maps.containsKey(value)) {
//加 1
maps.replace(value, maps.get(value), maps.get(value) + 1);
} else {
maps.put(value, 1);
}
}
//把 map 转 list
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(maps.entrySet());
//自定义排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
System.out.println("重复出现次数最小的两个数分别为:" + list.get(0).getKey() + "," + list.get(1).getKey());