返回
1122. 数组的相对排序:掌握排序背后的技巧,解决实际难题!
前端
2024-01-25 16:28:33
- 数组的相对排序
给你两个数组,第一个数组nums1
和第二个数组nums2
。
nums1
中的所有整数都在[1, n]
范围内,其中n
是nums1
的长度。nums2
中的所有整数也都在[1, n]
范围内。
排序nums1
使得nums1
中位于nums2
中的整数之前。更多正式的说,nums1重新排序后,对于每个
i <= n,nums1[i] = x
如果且仅x
在nums2
中并且nums1[i] <= x
,或者x
不在nums2
中。
返回重新排序后的数组nums1
。
示例 1:
输入:nums1 = [2,3,1,3,2,4,6,7,9,2,19], nums2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]
示例 2:
输入:nums1 = [2,3,1,3,2,4,6,7,9,2,19], nums2 = [2,1,4,3,9,6,1,7,5,23,12]
输出:[2,2,2,1,1,3,3,4,9,6,7]
提示:
1 <= nums1.length, nums2.length <= 10^4
1 <= nums1[i], nums2[i] <= 10^4
nums2
中的所有整数互不相同nums1
中的所有整数都在[1, n]
范围内,其中n
是nums1
的长度。
解题思路
这道题要求我们对nums1
进行重新排序,使得nums1
中位于nums2
中的整数之前。我们可以使用以下步骤来解决这个问题:
- 创建一个哈希表,键是
nums2
中的每个整数,值是该整数在nums2
中的索引。 - 遍历
nums1
,对于每个元素num
,如果num
在哈希表中,则将num
移动到nums1
中哈希表中对应索引的位置之前。 - 将
nums1
中剩下的元素移动到数组的末尾。
代码示例
def relativeSortArray(nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
# 创建哈希表
hashmap = {}
for i, num in enumerate(nums2):
hashmap[num] = i
# 重新排序nums1
nums1.sort(key=lambda num: (hashmap.get(num, float('inf')), num))
# 返回重新排序后的数组
return nums1
总结
通过本文,我们学习了如何解决力扣第 1122 题——数组的相对排序。我们从题目入手,逐步分析题意,并提供详细的解题思路和代码示例。通过本文,您将掌握排序背后的技巧,学会解决实际难题,并进一步提升您的编程能力。