【问题标题】:How can i write this for two unsorted arrays code?我怎样才能为两个未排序的数组代码编写这个?
【发布时间】:2021-08-22 17:48:48
【问题描述】:

二分查找的想法在排序数组的情况下非常有效。我们可以对A[]和每个值进行排序A[i],搜索数组中是否存在另一个值K-A[i] K-A[i]。二分搜索在O(logn) 中执行搜索,这可以帮助我们提高时间复杂度。

解决步骤

对数组A[]进行升序排序 对于每个元素A[i],使用二分搜索查找K-A[i]。 如果数组 A 中存在值K-A[i],则返回 true。 如果在整个数组中没有找到这样的一对 ,则返回 false。

伪代码 '''

int find_sumPair (A[], n, K)
     {
       Sort ( A, n)
       for( i = 0 to n-1 )
       { 
          x = binarySearch ( A, 0, n-1, K-A[i] )
          if ( x ) 
          return 1
       }
     return -1
     }

'''

这个伪代码只用于一个数组,如果我想检查两个未排序数组中的对,给定总和,伪代码的复杂度时间应该是 O(nlogn)??

【问题讨论】:

    标签: arrays algorithm sorting binary-search pseudocode


    【解决方案1】:

    上述方法在 O(nlogn) 时间内解决了这个问题。 您可以对 1 个数组进行排序:O(nlogn) 时间,然后您可以遍历另一个数组并对排序后的数组执行二进制搜索以找到 K-A[i],即 O(logn) 时间,因此总时间变为 O(nlogn)。所以 TC 将是 O(nlogn) + O(nlogn) = O(nlogn)。

    你可以在 O(n) 时间内解决这个问题,使用 O(n) 空间,使用 hashmap。

    #Pusedo code
    arr1 = [...]
    arr2 = [...]
    K = some_value
    hashmap = {k: True for k in arr1}
    
    for each_element in arr2:
        if K-each_element in hashmap:
            return "sum found of element [each_element, K-each_element]"
    return "no such sum present"
    

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2018-12-06
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多