LeetCode 剑指 Offer II 075. 数组相对排序缩略图

给定两个数组,arr1 和 arr2

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

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

剑指 Offer II 075. 数组相对排序 – 力扣(Leetcode)

LeetCode 剑指 Offer II 075. 数组相对排序插图
OpenCV步步精深-可心科创工作室

思路:把arr1中有,arr2中没有的升序排列拼在最后;然后把arr1,和arr2都有的,把arr1中出现的次数给arr2就行了。

python3实现:

class Solution:
    def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
        # 在arr1中找到arr2中没有的元素,然后升序排列;有的元素直接把arr1中出现的次数付给arr2的key就行
        dic_arr1 = collections.Counter(arr1)
        dic_arr2 = collections.Counter(arr2)

        part2 = []
        for elem in dic_arr1:
            if elem not in dic_arr2:
                for count in range(dic_arr1[elem]):
                    part2.append(elem)
            else:
                dic_arr2[elem] = dic_arr1[elem]
        result = []
        for each in dic_arr2:
            for c in range(dic_arr2[each]):
                result.append(each)
        part2.sort()
        result += part2
        return result
LeetCode 剑指 Offer II 075. 数组相对排序插图1
OpenCV步步精深-可心科创工作室

更多干货见 OpenCV步步精深

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注