1、题目描述
给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。
2、输入描述
一个数组。
3、输出描述
去重排序后的数组。
用例:
输入
1,3,3,3,2,4,4,4,5
输出
3,4,1,2,5
温馨提示!!!
华为OD机试考试官方会对考生代码查重。华为od机试因为有题库所以有很大的概率抽到原题。如果碰到了题库中的原题,千万不要直接使用题解中的代码,一定要做些修改,比如代码中的变量名,除此之外,代码的组织结构和逻辑也要进行一些改变,所以在日常的刷题中,要提前编写好属于自己的代码。
4、题解
本题简单,主要是排序并且记录数字出现的次数与顺序,可以使用LinkedHashMap。
代码如下:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = Arrays.stream(sc.nextLine().split(","))
.mapToInt(Integer::parseInt).toArray();
// 记录数字出现的位置与次数
Map<Integer, Integer> maps = new LinkedHashMap<>();
for (int i : arr) {
Integer num = maps.getOrDefault(i, 0);
maps.put(i, num + 1);
}
List<Map.Entry<Integer, Integer>> reslist = new ArrayList<>(maps.entrySet());
// 排序
Collections.sort(reslist, ((o1, o2) -> o2.getValue() - o1.getValue()));
Map<Integer, Integer> resMap = new LinkedHashMap<>();
for (Map.Entry<Integer, Integer> map : reslist) {
resMap.put(map.getKey(), map.getValue());
}
for (Map.Entry<Integer, Integer> entry : resMap.entrySet()) {
System.out.print(entry.getKey() + " ");
}
}
执行结果如下: