力扣刷题记录#数组#简单#1122数组的相对排序

题目描述

给出两个数组,arr1 和 arr2,

  • arr2 中的元素各不相同
  • arr2 中的每个元素都出现在 arr1 中

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

注意:

  • arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • arr2 中的元素 arr2[i] 各不相同
  • arr2 中的每个元素 arr2[i] 都出现在 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]

解答

class Solution(object):
    def relativeSortArray(self, arr1, arr2):
        """
        :type arr1: List[int]
        :type arr2: List[int]
        :rtype: List[int]
        """
        
        len1 = len(arr1)
        len2 = len(arr2)
        
        if len1==len2:
            return arr2
        
        # 统计arr1中各个数出现的次数
        counts1 = dict()
        for num in arr1:
            if num not in counts1.keys():
                counts1[num] = 0
            counts1[num] += 1
        
        # 统计arr2中各个数出现的次数
        counts2 = dict()
        for num in arr2:
            if num not in counts2.keys():
                counts2[num] = 0
            counts2[num] += 1
        
        # 没在arr2中出现的数(无重复)
        rest = list(set(arr1) - set(arr2))
        
        # 将arr1中包含arr2的数排序,按arr2的顺序
        ans = list()
        for num in arr2:
            count = counts1[num]
            ans = ans + [num]*count
        
        # 将没在arr2中出现的数排序
        rest_all = list()
        for num in rest:
            count = counts1[num]
            rest_all = rest_all + [num]*count
            
        rest_all.sort()
        
        return ans+rest_all
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值