📅  最后修改于: 2023-12-03 14:58:18.078000             🧑  作者: Mango
给定两个正整数数组A和B,对于A中每个元素a[i],在B中找到一个比a[i]大的最小元素。对于B中的每一个元素b[j],找到A中比b[j]小的最大元素。如果不存在这样的元素,则返回-1。
题目要求在另一个数组中找到符合条件的数,因此我们可以暴力枚举每个元素,但时间复杂度会很高。
我们可以先将数组B排序,然后在B中使用二分查找找到第一个比a[i]大的元素的下标,如果找到了则返回该元素,如果未找到则返回-1。
对于B中的每个元素,我们也可以使用类似的方法,在A中使用二分查找找到第一个比b[j]小的元素的下标,如果找到了则返回该元素,如果未找到则返回-1。
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
def find_number(A, B):
B = sorted(B)
res = []
for i in A:
idx = binary_search(B, i)
if idx == -1:
res.append(-1)
else:
res.append(B[idx])
res2 = []
for j in B:
idx2 = binary_search(A, j)
if idx2 == -1:
res2.append(-1)
else:
res2.append(A[idx2])
return res, res2