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

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. 迴圈跑完後將兩個部分結合再一起,第二個部分再排序即可