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

本文介绍了如何解决LeetCode上的1122题——数组的相对排序。通过建立桶装结构记录arr2中元素的位置,并定义自定义比较函数,实现了对arr1的排序,使得排序后的arr1满足题目要求。具体步骤包括记录arr2的元素位置、定义比较函数以及使用排序函数进行排序。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值