📅  最后修改于: 2023-12-03 15:06:14.548000             🧑  作者: Mango
在这个问题中,我们有两个未排序的整数数组,需要找出它们之间的最小差值对。
最直观的方法是对两个数组进行排序,然后使用两个指针进行遍历,找到最小差值对。但是排序的时间复杂度是O(nlogn),不满足题目要求的O(n)时间复杂度。
另一种方法是对其中一个数组进行排序,然后对另一个数组中的每个元素进行二分查找。这样时间复杂度为O(nlogn),不同于题目要求的O(n)时间复杂度。
更好的方法是使用桶排序。首先将其中一个数组进行桶排序,然后遍历另一个数组,并在桶中查找相邻的元素,找到最小差值对。这样时间复杂度为O(n),满足题目要求。
def find_min_diff(nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: int
"""
MAX_NUM = 1000000
bucket = [False] * (2 * MAX_NUM + 1)
for num in nums1:
bucket[num + MAX_NUM] = True
min_diff = float('inf')
for num in nums2:
i = num + MAX_NUM
left, right = i - 1, i + 1
while left >= 0 and not bucket[left]:
left -= 1
while right < 2 * MAX_NUM + 1 and not bucket[right]:
right += 1
if left >= 0:
min_diff = min(min_diff, i - left)
if right < 2 * MAX_NUM + 1:
min_diff = min(min_diff, right - i)
return min_diff
以上代码使用Python实现,时间复杂度为O(n),空间复杂度为O(MAX_NUM)。其中,MAX_NUM是数字的最大值,用于避免负数下标。输入的nums1和nums2为两个未排序的整数数组,函数返回它们之间的最小差值对。