个人博客首页: KJ.JK
专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用JS语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习
给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序
输入
一个数组
输出
去重排序后的数组
输入
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(','));