给定两个数组,arr1
和 arr2
,
arr2
中的元素各不相同arr2
中的每个元素都出现在arr1
中
对 arr1
中的元素进行排序,使 arr1
中项的相对顺序和 arr2
中的相对顺序相同。未在 arr2
中出现过的元素需要按照升序放在 arr1
的末尾。
剑指 Offer II 075. 数组相对排序 – 力扣(Leetcode)

思路:把arr1中有,arr2中没有的升序排列拼在最后;然后把arr1,和arr2都有的,把arr1中出现的次数给arr2就行了。
python3实现:
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
# 在arr1中找到arr2中没有的元素,然后升序排列;有的元素直接把arr1中出现的次数付给arr2的key就行
dic_arr1 = collections.Counter(arr1)
dic_arr2 = collections.Counter(arr2)
part2 = []
for elem in dic_arr1:
if elem not in dic_arr2:
for count in range(dic_arr1[elem]):
part2.append(elem)
else:
dic_arr2[elem] = dic_arr1[elem]
result = []
for each in dic_arr2:
for c in range(dic_arr2[each]):
result.append(each)
part2.sort()
result += part2
return result
