当前位置: 代码迷 >> 综合 >> 【Leetcode 每日一题】1122. 数组的相对排序(标记位置,自定义排序函数)
  详细解决方案

【Leetcode 每日一题】1122. 数组的相对排序(标记位置,自定义排序函数)

热度:4   发布时间:2023-11-23 12:06:37.0

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 = 1010bucket = [0]*max_len# 记录arr2中每个元素出现的位置index = 1for example in arr2:bucket[example] = indexindex += 1# 自定义cmp进行比较def mycmp(a, b):# a, b都出现在arr2中比较位置大小if bucket[a] != 0 and bucket[b] != 0:if bucket[a] <  bucket[b]:return -1else:return 1# 只有一个出现出现的排在前面elif bucket[a] != 0 and bucket[b] == 0:return -1elif bucket[a] == 0 and bucket[b] != 0:return 1# 都未出现比较数值大小else:if a < b:return -1else:return 1# 排序arr1.sort(key = ft.cmp_to_key(mycmp))return arr1