📌  相关文章
📜  从第二个数组中的每个元素的第一个数组中严格查找更大的元素(1)

📅  最后修改于: 2023-12-03 14:49:26.884000             🧑  作者: Mango

从第二个数组中的每个元素的第一个数组中严格查找更大的元素

在这个主题中,我们会学习如何从第二个数组中的每个元素的第一个数组中查找更大的元素,这个问题可以用多种方法来解决,我们会介绍其中两种方法:

方法一:暴力搜索

这种方法比较简单,就是遍历第二个数组中的每个元素,然后在第一个数组中找到比它大的元素,最后将这个更大的元素存储在一个新的数组中,代码实现如下:

def findGreaterElements(arr1, arr2):
    res = []
    for i in arr2:
        greater = -1
        for j in arr1:
            if j > i:
                greater = j
                break
        res.append(greater)
    return res

这个函数接受两个数组作为参数,先遍历第二个数组,然后在第一个数组中找到比它大的元素,如果找到了就存储在一个变量greater中,如果没有找到就将greater的值设为-1,然后将greater存储在结果数组res中,最后返回res。这个函数的时间复杂度为O(n^2)。

方法二:使用二分查找

这种方法是通过二分查找来实现的,先将第一个数组排序,然后对于第二个数组中的每个元素,使用二分查找在第一个数组中查找比它大的元素,代码实现如下:

def binarySearch(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] <= target:
            left = mid + 1
        else:
            right = mid - 1
    return arr[left] if left < len(arr) else -1

def findGreaterElements(arr1, arr2):
    arr1.sort()
    res = []
    for i in arr2:
        greater = binarySearch(arr1, i)
        res.append(greater)
    return res

这个函数先将第一个数组排序,然后定义了一个二分查找函数binarySearch,这个函数接受一个数组和一个目标值作为参数,返回在数组中查找目标值的结果,如果找到了就返回这个元素,如果没找到就返回-1。接下来的函数遍历第二个数组,对于每个元素,使用binarySearch在第一个数组中查找比它大的元素,然后将结果存储在结果数组res中,最后返回res。这个函数的时间复杂度为O(nlogn)。