列表

详情


1122. 数组的相对排序

给你两个数组,arr1 和 arr2arr2 中的元素各不相同,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]

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2021-06-11 16:29:56

func relativeSortArray(arr1 []int, arr2 []int) []int {
    mp := make(map[int]int)
    for i, a := range arr2 {
        mp[a] = i
    }

    sort.Slice(arr1, func(i, j int) bool {
        c1, h1 := mp[arr1[i]]
        c2, h2 := mp[arr1[j]]
        if h1 && h2 {
            return c1 < c2
        } 
        
        if  h1 || h2 {
            return h1
        }

        return arr1[i] < arr1[j]
    })

    return arr1
}

上一题