【华为OD机试真题 JS语言】6、数组去重和排序 | 机试真题+思路参考+代码解析

文章目录

    • 一、题目
      • 题目描述
      • 输入输出
      • 样例1
    • 二、思路参考
    • 三、代码参考
  • 作者:KJ.JK


个人博客首页: KJ.JK
 
专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用JS语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习


一、题目


题目描述

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


输入输出

输入
一个数组
 
输出
去重排序后的数组


样例1

输入
1,3,3,3,2,4,4,4,5


输出
3,4,1,2,5


说明:
数组大小不超过100 数组元素值大小不超过100

二、思路参考


1、首先使用集合(Set)对给定数组(nums)进行去重操作,得到一个不含重复元素的集合(unique_set)

2、然后,对unique_set中的每个元素进行统计,统计其在原始数组(nums)中的出现次数,并构成一个元组列表(count_list),其中每个元组的第一个元素为元素本身,第二个元素为其在nums中出现的次数

3、接下来,对count_list进行排序。排序的规则是:首先按照元素出现的次数从高到低进行排序,如果次数相同,则按照元素第一次出现的顺序进行排序

4、最后,根据排序后的count_list,构建一个结果列表(result),其中只包含元组中的元素部分

5、返回结果列表result作为最终的去重排序后的结果


三、代码参考

function removeDuplicates(nums) {
    // 使用Set去重得到不重复的元素集合
    const uniqueSet = new Set(nums);

    // 统计元素在原始数组中的出现次数并构成元组列表
    const countList = Array.from(uniqueSet).map(num => [num, nums.filter(n => n === num).length]);

    // 对元组列表进行排序,首先按照出现次数从高到低排序,次数相同按照第一次出现的顺序排序
    countList.sort((a, b) => b[1] - a[1] || nums.indexOf(a[0]) - nums.indexOf(b[0]));

    // 构建去重排序后的结果数组
    const result = countList.map(([num, count]) => num);

    return result;
}

// 测试样例
const nums = [1, 3, 3, 3, 2, 4, 4, 4, 5];
const result = removeDuplicates(nums);
console.log(result.join(','));



作者:KJ.JK

你可能感兴趣的:(2023华为OD机试真题(JS,语言),B卷,华为od,javascript,开发语言,华为OD机试真题,数组去重和排序)