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

华为OD机试【数组排序(java)(100分) 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照第一次出现顺序进行先后排序 阅读详情

 思路:

  • 首要统计数组中每个元素出现的频次以及出现顺序(以第一次出现的为准)
  • 创建一个结构体,包含: 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> {
        @Override
        public int compare(Node o1, Node o2) {
            //构建比较器,统计次不同时按次数比较否则按出现顺序排序
            return o1.count != o2.count ? o2.count - o1.count : o1.order - o2.order;
        }
    }

【华为OD机试真题 Python】数据排序 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同次数按照第一次出现的顺序进行先后排序 阅读详情

相关推荐

【华为OD机试真题 Java】数组排序

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

A_D_I_D_A_S的博客 348

面试题

面试题一.编程题 一.编程题 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序。 示例: 输入:[1,3,3,3,2,4,4,4,5] 输出:[3,4,1,2,5] import java.util.*; public class TestWrite { public static void main(String[] args) { int[] arr = {}; List list = TestWrit

梦醒见繁星 1983

数组排序【华为OD机试JAVA&Python&C++&JS题解】

数组排序【华为OD机试JAVA&Python&C++&JS题解】 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次 数从进行排序相同出现次数按照第一次出现顺序进行先后排序。 输入描述: 一个数组 输出描述: 排序后的数组

博客 1700

C++ 乱序数组删除重复元素

给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照次出现顺序进行先后排序。 [输入描述: 一个数组 输出描述: 排序后的数组 示例1 输入: 1,3,3,3,2,4,4,4,5 输出: 3,4,1,2,5 备注: 数组大小不超过100 数组元素值大小不超过100 bool compare_map(const pair<int, int>&a, const pair<int, int>&b) {

shuaijieer的博客 2073

数组排序按照出现的次数进行排序)(C语言)

给定一个乱序数组删除所有重复元素,使得每个元素只出现一次并且按照出现的次数进行排序\ 相同出现次数按照第一次出现顺序进行先后排序数组大小不超过`100`,数组元素值不超过`100` ## 输入 一个数组 ## 输出 排序后的数组 ## 示例一 ### 输入 1,3,3,3,2,4,4,4,5 ### 输出 3,4,1,2,5 # 思路 解题思路: 1. **读取输入**:首先通过`fgets`函数读取用户输入的一行整数,以逗号为分隔符。然后使用`s

南京大学软件工程硕士在读 1469

【2024年华为OD机试】(B卷,100分)- 数组排序(Java & JS & Python&C/C++)

通过上述步骤,我们可以效地对数组进行排序,确保结果按出现次数排序相同出现次数第一次出现顺序排序。这种方法的时间复杂度主要由排序操作决定,为。给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照第一次出现顺序进行先后排序。如果有其他问题,欢迎随时提问!如果有其他问题,欢迎随时提问!如果有其他问题,欢迎随时提问!如果有其他问题,欢迎随时提问!

嵌入式技术开发 1320

(c语言版)数组排序 题目描述: 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数

给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照第一次出现顺序进行先后排序。【编程题目 | 100分】数组排序 [ 100 / 中等 ]

qq_42835526的博客 733

华为OD机考2025C卷 - 数组排序 (Java & Python& JS & C++ & C )

华为OD机考2025C卷 - 数组排序 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照第一次出现顺序进行先后排序

算法大师! 3793

乱序数组按出现次数排序(华为od机考题)

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

qq_57223586的博客 502

【Python3】数组排序

【python】数组排序

HHY_haii的专栏 1727

【华为OD机试真题E卷】6、数组排序 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题E卷】6、数组排序 | 机试真题+思路参考+代码解析(C++、Java、Py) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,华为od算法,华为o

正在更新最新华为OD机试2025B卷,提供OJ在线刷题 1944

华为OD机试 - 数组排序(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1256

华为机试:数组排序

【编程题目 | 100分】数组排序 [ 100 / 中等 ] 数组排序 题目描述: 给定一个乱序数组删除所有的重复元素,使得每个元素只出现一次并且按照出现的次数进行排序相同出现次数按照第一次出现顺序进行先后排序。 输入描述: 一个数组 输出描述: 排序后的数组 示例 1: 输入 1,3,3,3,2,4,4,4,5 输出 3,4,1,2,5 备注 数组大小不超过100 数组元素值大小不超过100 思路分析 又一个哈希表的排序,这个排序相对简单,只需要对value降序排,ke

小朱小朱绝不认输的博客 5926

【华为OD机试真题 2025B卷】670、数组排序 | 机试真题+思路参考+代码解析(C++、Java、Py)(B卷复用)

【华为OD机试真题 2025B卷】670、数组排序 | 机试真题+思路参考+代码解析(C++、Java、Py)(B卷复用) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为

KJ.JK 1838

LeetCode——解决删除数组重复元素问题三种方式

情景要求: (1)输入的数组元素为基本类型int。 (2)返回不含重复元素数组,其类型为基本类型int。 (3)对最后的结果数组元素顺序没有要求,可乱序也可排序。 经过一系列的思考与实践,总结出了以下三种不同情形“删除数组重复元素”的解决办法。 1、通过原始数组删除重复元素 方法一:不新开辟内存(不创建list、set等),可以在原始数组中原地删除重复元素。 由于数组的长...

J.Jian博客 1万+

数组排序 - 华为OD统一考试(Python 题解)

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

学习,你不是一个人在战斗 ~ 961302305(QQ,微信) 593

华为OD E卷 #5 数组排序

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

m0_51156625的博客 305

数组排序问题

首先,要把数组中所有复的元素删除,保证每个元素在处理后的数组里只出现一次。其次,要对后的数组进行排序排序规则是按照元素在原数组中出现的次数排列。需要注意的是,这个数组的大小不会超过100,数组元素的值也不会超过100。在这个示例中,数字3和4都出现了3次,是出现次数最多的,按照数组第一次出现的顺序,3在前,4在后。数字1、2、5都只出现了1次,它们按照数组第一次出现的顺序依次排列,所以最终输出是3,4,1,2,5。输入是一个数组,这个数组以字符串形式呈现,元素之间用逗号分隔。

m0_62153576的博客 349
上一篇: 一个Set解决二叉树任何节点间的距离问题
下一篇: 一个数的所有连续自然数之和
_nohave
博客等级 码龄9年 82粉丝 83原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值