LeetCode:1122. 数组的相对排序!
发布日期:2021-05-08 02:38:25 浏览次数:23 分类:精选文章

本文共 1224 字,大约阅读时间需要 4 分钟。

数组的相对排序

给你两个数组 arr1arr2,要求对 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]

解题思路

  • 统计元素出现次数:首先统计 arr2 中每个元素的出现次数。这些元素在排序后的 arr1 中需要按照 arr2 的顺序排列,重复次数也要一致。
  • 处理 arr1 中的元素:遍历 arr1 中的每个元素,将它们添加到结果数组中。对于 arr2 中的元素,按照 arr2 的顺序添加相应次数的元素。
  • 处理未出现于 arr2 的元素:在处理完 arr2 中的元素后,剩下的元素(不在 arr2 中出现过的)按照升序排列,放在结果数组的末尾。
  • 代码实现

    class Solution:
    def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:
    count = max(arr1)
    cnt = [0] * (count + 1)
    res = []
    for num in arr1:
    cnt[num] += 1
    for num in arr2:
    res.extend([num] * cnt[num])
    cnt[num] = 0
    for i in range(1, count + 1):
    if cnt[i]:
    res.extend([i] * cnt[i])
    return res

    代码解释

  • 初始化计数器数组cnt 数组用于记录每个数字在 arr1 中的出现次数。数组大小为 max(arr1) + 1,以确保所有可能的数字都能被记录。
  • 统计 arr1 中的元素:遍历 arr1,将每个元素的计数器加一。
  • 处理 arr2 中的元素:遍历 arr2,对于每个元素,根据其在 cnt 中的计数器值,将该元素重复该次数添加到结果数组中,并将计数器重置为0。
  • 处理未出现于 arr2 的元素:遍历从1到 max(arr1) 的所有数字,检查计数器是否为0。如果计数器不为0,说明该数字未在 arr2 中出现过,按照升序添加到结果数组末尾。
  • 通过这种方法,可以确保排序后的 arr1 中元素的相对顺序与 arr2 中的顺序一致,同时未在 arr2 中出现过的元素按升序排列放在末尾。

    上一篇:Python笔记:实验9、计算小明爬楼梯的爬法数量!!!!
    下一篇:(新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年03月27日 23时28分08秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章