Leetcode 每日一题
题目链接: 1122. 数组的相对排序
难度: 简单
解题思路: 先记录出arr2中出现的元素的位置。定义一个比较函数,若arr1中的值都出现在arr2中则比较arr1中的位置大小;若只有一个出现则出现的排在前面;若都未出现则比较arr1的本身的值的大小。
题解:
import functools as ft
class Solution:
def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
max_len = 1010
bucket = [0]*max_len
# 记录arr2中每个元素出现的位置
index = 1
for example in arr2:
bucket[example] = index
index += 1
# 自定义cmp进行比较
def mycmp(a, b):
# a, b都出现在arr2中比较位置大小
if bucket[a] != 0 and bucket[b] != 0:
if bucket[a] < bucket[b]:
return -1
else:
return 1
# 只有一个出现出现的排在前面
elif bucket[a] != 0 and bucket[b] == 0:
return -1
elif bucket[a] == 0 and bucket[b] != 0:
return 1
# 都未出现比较数值大小
else:
if a < b:
return -1
else:
return 1
# 排序
arr1.sort(key = ft.cmp_to_key(mycmp))
return arr1