Ray-56 / like-algorithms

每天一道算法题,突破自己
2 stars 1 forks source link

✅1122. 数组的相对排序 #161

Open Ray-56 opened 4 years ago

Ray-56 commented 4 years ago

1122. 数组的相对排序

给你两个数组,arr1 和 arr2,

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。   示例 :

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

提示:

Ray-56 commented 4 years ago

桶排序

/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 * @return {number[]}
 */
var relativeSortArray = function(arr1, arr2) {
    const bucket = {};
    const ret = [];

    for (let i = 0; i < arr1.length; i++) {
        if (bucket[arr1[i]]) {
            bucket[arr1[i]]++;
        } else {
            bucket[arr1[i]] = 1; 
        }
    }

    for (let i = 0; i < arr2.length; i++) {
        while (bucket[arr2[i]]) {
            ret.push(arr2[i]);
            bucket[arr2[i]]--;
        }
    }
    for (let key in bucket) {
        while (bucket[key]) {
            ret.push(key);
            bucket[key]--;
        }
    }
    return ret;
};