数组的相对排序
给你两个数组,arr1 和 arr2,
arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 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]
思路
解法一
哈希表+排序
- 使用哈希表统计arr1中元素出现次数
- 遍历arr2,使用临时数组添加元素
- 遍历arr1,将不在arr2中的元素添加到另外一个临时数组中,并进行排序
from typing import List
from collections import Counter
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
arr = []
temp = []
map = Counter(arr1) # 统计次数
for digit in arr2:
while map[digit] > 0: # 添加数组元素
arr.append(digit)
map[digit] -= 1
for num in arr1: # 添加其他元素并排序
if num not in arr2:
temp.append(num)
temp.sort()
return arr + temp