1122. 数组的相对排序

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