联系我
×

1122. 数组的相对排序

查看原题

解题思路

  1. 先将数组arr1映射到map对象中,用数组的值为键,数组每个值得个数为值
  2. 遍历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;
};

posted @ 2021-12-23 16:39  .筱  阅读(38)  评论(0)    收藏  举报