返回

1122. 数组的相对排序:掌握排序背后的技巧,解决实际难题!

前端

  1. 数组的相对排序

给你两个数组,第一个数组nums1和第二个数组nums2

  • nums1中的所有整数都在[1, n]范围内,其中nnums1的长度。
  • nums2中的所有整数也都在[1, n]范围内。

排序nums1使得nums1中位于nums2中的整数之前。更多正式的说,nums1重新排序后,对于每个i <= n,nums1[i] = x如果且仅xnums2中并且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]范围内,其中nnums1的长度。

解题思路

这道题要求我们对nums1进行重新排序,使得nums1中位于nums2中的整数之前。我们可以使用以下步骤来解决这个问题:

  1. 创建一个哈希表,键是nums2中的每个整数,值是该整数在nums2中的索引。
  2. 遍历nums1,对于每个元素num,如果num在哈希表中,则将num移动到nums1中哈希表中对应索引的位置之前。
  3. 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 题——数组的相对排序。我们从题目入手,逐步分析题意,并提供详细的解题思路和代码示例。通过本文,您将掌握排序背后的技巧,学会解决实际难题,并进一步提升您的编程能力。