LeetCode - relative sort array

给你两个数组,arr1 和 arr2
arr1 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

上面這一段是LeetCode中文站的題目說明,對於很難理解英文題目的人而言應該是個不錯的選擇,通常我會看完題目後再回到英文版去解答,這一題的意思其實就是讓arr1的數字,依照arr2的順序來排列,因為arr2的順序是2,1,4,3,9,6,所以把arr1裡面的2都放在前面,接著放1,4,3,9,6這些數字,都放完之後,把剩餘的數字依照昇冪排序即可

VSCode有一個外掛可以很方便的練習,就不多介紹了,自行觀看:leetcode


Test Case

输入: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]

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var relativeSortArray = function(arr1, arr2) {
let all = arr1
let group = arr2
let part1 = []
let part2 = []

for (let index = 0; index < all.length; index++) {
if (group.includes(all[index])){
part1 = [...part1,...all.filter(x=>x===group[index])]//?
}else{
part2.push(all[index])
}
}
return part1.concat(part2.sort((a,b)=>a-b))
};
  1. 先宣告好變數來存放arr2存在的資料、以及不存在的資料
  2. 利用for迴圈處理arr1,存在arr2的數字表示需要篩選出來,不存在的就放著等最後的排序
  3. 迴圈跑完後將兩個部分結合再一起,第二個部分再排序即可