赞
踩
OD_2024_C卷_100分_74、数组去重和排序【JAVA】【字符串,数组,集合操作】
给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。
一个数组
去重排序后的数组
1,3,3,3,2,4,4,4,5
3,4,1,2,5
说明
数组大小不超过100 数组元素值大小不超过100。
package odjava.分100; import java.util.HashMap; import java.util.Scanner; import java.util.StringJoiner; /** * 字符串,数组,集合操作 * * 输入:1,3,3,3,2,4,4,4,5 * 输入:3,4,1,2,5 */ public class 数组去重和排序_74 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] arr = sc.nextLine().split(","); // 从输入中读取数组元素,以逗号分隔 System.out.println(getResult(arr)); // 调用 getResult 方法处理数组并输出结果 } // 处理数组去重和排序的方法 public static String getResult(String[] arr) { HashMap<String, Integer> count = new HashMap<>(); // 用于存储每个元素出现的次数 HashMap<String, Integer> first = new HashMap<>(); // 用于存储每个元素第一次出现的索引 // 遍历数组,统计元素出现次数和第一次出现的索引 for (int i = 0; i < arr.length; i++) { String s = arr[i]; // 当前元素 count.put(s, count.getOrDefault(s, 0) + 1); // 更新元素出现次数 first.putIfAbsent(s, i); // 如果元素不存在于 first 中,则将其添加进去,记录第一次出现的索引 } StringJoiner sj = new StringJoiner(","); // 用于构建输出字符串 // 对元素进行排序,先按出现次数降序排列,再按第一次出现的索引升序排列 first.keySet().stream().sorted((a, b) -> { int countA = count.get(a); // 元素 a 出现的次数 int countB = count.get(b); // 元素 b 出现的次数 if (countA != countB) { // 如果两个元素出现的次数不相等 return countB - countA; // 按出现次数降序排列 } else { // 如果两个元素出现的次数相等 int firstA = first.get(a); // 元素 a 第一次出现的索引 int firstB = first.get(b); // 元素 b 第一次出现的索引 return firstA - firstB; // 按第一次出现的索引升序排列 } }).forEach(s -> sj.add(s)); // 将排好序的元素添加到 StringBuilder 中 return sj.toString(); // 返回排序去重后的数组结果字符串 } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。