「每日LeetCode」2020年11月14日
本文最后更新于:2023年3月19日 晚上
Lt1122. 数组的相对排序
1122. 数组的相对排序
给你两个数组,arr1
和 arr2
,
arr2
中的元素各不相同arr2
中的每个元素都出现在arr1
中
对 arr1
中的元素进行排序,使 arr1
中项的相对顺序和 arr2
中的相对顺序相同。未在 arr2
中出现过的元素需要按照升序放在 arr1
的末尾。
示例:
1 |
|
提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2
中的元素arr2[i]
各不相同arr2
中的每个元素arr2[i]
都出现在arr1
中
思路
遍历两次+额外空间存储数组
遍历 arr2,统计 arr1 中出现的数量加入结果数组中,并删除 arr1 中对应的元素。返回结果数组和剩余按升序排列过的 arr1 数组。
哈希表
还是遍历两次,第二次遍历的是 arr1 排序后的数组。遍历后根据 map 的 key 和 value 生成新数组放回。
改造 sort 函数
如果 x 和 y 都不在 arr2 中,则返回 x-y,则是未出现的元素在数组最后升序排列的判断过程。
如果 x 在 y 中有一个不在 arr2 中,则直接返回大于等 0 的数,不改变顺序即可。
如果 x 和 y 都在 arr2 中吗,则返回 arr2.indexOf(x) - arr2.indexOf(y),根据 arr2 中的顺序排序。
解答
遍历两次+额外空间存储数组
1 |
|
哈希表
1 |
|
改造 sort 函数
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!