Relative Sort Array
Description
Given two arrays arr1
and arr2
, the elements of arr2
are distinct, and all elements in arr2
are also in arr1
.
Sort the elements of arr1
such that the relative ordering of items in arr1
are the same as in arr2
. Elements that don't appear in arr2
should be placed at the end of arr1
in ascending order.
Example 1:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19]
Constraints:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
- Each
arr2[i]
is distinct. - Each
arr2[i]
is inarr1
.
Solution(javascript)
/** 这题的输入范围是 0 ~ 1000, 所以我们可以用 counting sort
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number[]}
*/
const relativeSortArray = function (arr1, arr2) {
const count = arr1.reduce((acc, v) => {
acc[v] = (acc[v] || 0) + 1
return acc
}, [])
const result = []
arr2.forEach((num) => {
while (count[num] > 0) {
result.push(num)
count[num] -= 1
}
})
count.forEach((currentCount, key) => {
const num = Number(key)
for (let i = 0; i < currentCount; i++) {
result.push(num)
}
})
return result
}