Appearance
1122. 数组的相对排序
题目描述
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例 1:
- 输入: arr1 =
[2,3,1,3,2,4,6,7,9,2,19], arr2 =[2,1,4,3,9,6] - 输出:
[2,2,2,1,4,3,3,9,6,7,19]
示例 2:
- 输入: arr1 =
[28,6,22,8,44,17], arr2 =[22,28,8,6] - 输出:
[22,28,8,6,17,44]
提示:
1 <= arr1.length, arr2.length <= 10000 <=arr1[i],arr2[i]<= 1000arr2中的元素arr2[i]各不相同arr2中的每个元素arr2[i]都出现在arr1中
难度: Easy
题解代码
javascript
/**
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number[]}
*/
var relativeSortArray = function(arr1, arr2) {
let res = [], hash = {}
for(let i in arr1) {
hash[arr1[i]] = (hash[arr1[i]] || 0) + 1
}
for (let i in arr2) {
res = res.concat(Array(hash[arr2[i]]).fill(arr2[i]))
arr1 = arr1.filter(item => item !== arr2[i])
}
return res.concat(arr1.sort((m, n) => m - n))
};