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


🍂个人博客首页: 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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KJ.JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值