1122. 数组的相对排序
给你两个数组,
arr1
和 arr2
,arr2
中的元素各不相同,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]
提示:
1 <= arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2
中的元素arr2[i]
各不相同
arr2
中的每个元素arr2[i]
都出现在arr1
中
法 1 桶排序
思路
先统计arr1出现的次数,然后按照arr2的顺序来取元素,最后把剩下的元素追加到res中
题解
class Solution: def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]: # 统计出现的次数 lists = [0] * 1001 for num in arr1: lists[num] += 1 # 按照 arr2 的顺序取元素 res = [] for num in arr2: res += [num] * lists[num] lists[num] = 0 # 把剩余的按照升序最佳到res for i in range(len(lists)): if lists[i] == 0: continue res += [i] * lists[i] return res