
LeetCode:1122. 数组的相对排序!
统计元素出现次数:首先统计 处理 处理未出现于 初始化计数器数组: 统计 处理 处理未出现于
发布日期:2021-05-08 02:38:25
浏览次数:23
分类:精选文章
本文共 1224 字,大约阅读时间需要 4 分钟。
数组的相对排序
给你两个数组 arr1
和 arr2
,要求对 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
中出现过的元素按升序排列放在末尾。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月27日 23时28分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MUI之ajax获取后台接口数据
2019-03-05
使用sqlserver 查询不连续的数据
2019-03-05
用div+css+html+js 实现图片放大
2019-03-05
mui+vue.js实现上拉刷新和下拉加载
2019-03-05
mui实现分享新浪微博、QQ分享、微信分享的申请过程和分享成功过程
2019-03-05
mui返回到父页页面并进行刷新
2019-03-05
数据库中优化lock
2019-03-05
layui 点击选择框为啥会出现震动(已解决)
2019-03-05
layui跨行的使用
2019-03-05
地图划范围
2019-03-05
Hashtable的使用
2019-03-05
SSL证书下载及部署
2019-03-05