当前位置:   article > 正文

OD_2024_C卷_100分_74、数组去重和排序【JAVA】【字符串,数组,集合操作】

OD_2024_C卷_100分_74、数组去重和排序【JAVA】【字符串,数组,集合操作】

OD_2024_C卷_100分_74、数组去重和排序【JAVA】【字符串,数组,集合操作】

题目描述

给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。

输入描述

一个数组

输出描述

去重排序后的数组

用例1

输入

1,3,3,3,2,4,4,4,5

输出

3,4,1,2,5

说明
数组大小不超过100 数组元素值大小不超过100。
  • 1
  • 2
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(); // 返回排序去重后的数组结果字符串
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/319633
推荐阅读
相关标签
  

闽ICP备14008679号