1122. 数组的相对排序

  • LeetCode(力扣)

题目:

1122. 数组的相对排序

难度:简单 🌟🌟


给你两个数组,arr1arr2

  • 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 中可以用很简单的自定义排序解决,主要是为了记录 lambdasorted 的用法

思路:

  • 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)
    

复杂度分析:

不会😭~

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值