乱序数组 删除所有重复元素 使得每个元素只出现一次 并且按照出现次数由高到低排序 相同出现次数 按照第一次出现的顺序进行先后排序(要求稳定)

本文主要是介绍乱序数组 删除所有重复元素 使得每个元素只出现一次 并且按照出现次数由高到低排序 相同出现次数 按照第一次出现的顺序进行先后排序(要求稳定),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 思路:

  • 首要统计数组中每个元素出现的频次以及出现顺序(以第一次出现的为准)
  • 创建一个结构体,包含: val count order
  • 构造一个比较器确定比较规则(按照出现次数多少从大到小排序,出现次数相同则按照出现顺序order排序)
    public static int[] fx(int[] arr) {//收集节点信息HashMap<Integer, Node> map = new HashMap<>();int count = 0;for (int val : arr) {if (!map.containsKey(val)) {Node node = new Node(val, 1, count);map.put(val, node);count++;} else {Node node = map.get(val);node.count = node.count + 1;map.put(val, node);}}Collection<Node> values = map.values();Node[] nodes = values.toArray(new Node[0]);//生成信息后的原始节点信息for (Node n : nodes) {System.out.println(n.val + "\t" + n.count + "\t" + n.order);}System.out.println();Arrays.sort(nodes, new NodeComparator());//排序后的节点for (Node node : nodes) {System.out.println(node.val + "\t" + node.count + "\t" + node.order);}System.out.println();int[] res = new int[count];for (int i = 0; i < res.length; i++) {res[i] = nodes[i].val;}System.out.println(Arrays.toString(res));return res;}private static class Node {public int val; //值public int count; //值重复次数public int order; //顺序public Node(int val, int count, int order) {this.val = val;this.count = count;this.order = order;}}private static class NodeComparator implements Comparator<Node> {@Overridepublic int compare(Node o1, Node o2) {//构建比较器,统计次不同时按次数比较否则按出现顺序排序return o1.count != o2.count ? o2.count - o1.count : o1.order - o2.order;}}

这篇关于乱序数组 删除所有重复元素 使得每个元素只出现一次 并且按照出现次数由高到低排序 相同出现次数 按照第一次出现的顺序进行先后排序(要求稳定)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593690

相关文章

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#