1122. 数组的相对排序
查看原题
解题思路
- 先将数组arr1映射到map对象中,用数组的值为键,数组每个值得个数为值
- 遍历arr2将map中的元素全部取出,顺序排列,注意要
for(let i = 0;i<map.get(item);i++){
result.push(item);
}
将每一项都取出,防止遗漏重复项,取出一项后记得删除
3. 再次遍历map取出arr1特有的元素,进行排序再push到大数组中返回
代码
/**
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number[]}
*/
var relativeSortArray = function(arr1, arr2) {
// 将arr1映射到Map集合中值为元素的个数
const map = new Map();
arr1.forEach(item=>{
if(map.has(item)){
map.set(item,map.get(item)+1);
}else{
map.set(item,1);
}
});
let result =[];
//遍历数组arr2按顺序将map中的值push到result中
arr2.forEach(item=>{
for(let i = 0;i<map.get(item);i++){
result.push(item);
}
map.delete(item);
});
let other = [];
for (const [key,value] of map){
for(let i = 0;i<value;i++){
other.push(key);
}
}
result.push(...other.sort((a,b)=>a-b)) ;
return result;
};

浙公网安备 33010602011771号