- LeetCode(力扣)
题目:
1122. 数组的相对排序
难度:简单 🌟🌟
给你两个数组,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]
题解:
虽然是简单题,但是这道题在 python3 中可以用很简单的自定义排序解决,主要是为了记录 lambda 和 sorted 的用法
思路:
- 将 arr2 数组中的每个数记录相应的权重,越在前面的权重越大,使用字典来保存这个结果
- 自定义排序,按照权重的值进行排序,arr1 中未出现在 arr2 中的元素的权重值默认为 − 1 -1 −1
程序实现:
-
Python
class Solution: def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]: # 使用索引号记录权重值 d = {ele:i for i,ele in enumerate(arr2[::-1])} # 自定义排序 # sorted默认升序 # 第一个排序准则按照权重降序排序 未出现的默认为-1 # 第二个排序准则 按照负号 return sorted(arr1, key = lambda x:(d.get(x,-1),-x),reverse = True)
复杂度分析:
不会😭~