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