当前位置: 首页 > 知识库问答 >
问题:

如何为两个未排序的数组代码编写此代码?

柴嘉禧
2023-03-14

二进制搜索的想法在排序数组的情况下完美地工作。我们可以对A[]进行排序,对于每个值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)??

共有1个答案

薛晨
2023-03-14

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

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

#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"
 类似资料:
  • 本文向大家介绍手写代码:合并两个排序数组相关面试题,主要包含被问及手写代码:合并两个排序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 我试图在Spring Boot项目中使用最新(主)版本的Betamax,我得到了错误<code>SLF4J:检测到log4j-over-SLF4J。jar和slf4j-log4j12.jar在类路径上,抢占StackOverflowerError。。 所以我看了这个问题的最上面的答案,它说通过这样做来排除冲突依赖: 但是我的项目使用 Gradle,所以我必须将其转换为 Gradle,我真的不知道我

  • 本文向大家介绍手写代码:合并两个有序数组相关面试题,主要包含被问及手写代码:合并两个有序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 解法一: int num[m+n];//新建一个数组,对nums1和nums2排序,排完序赋值给nums1 解法二:   解法三:直接在nums1里进行操作,从nums1的尾部开始,取nums1和nums2中的最大值放入其中。如果n先到达0就能直接得到

  • 我有一些我需要的特定代码,为了能够有某些我不想每次都写的I/O东西,我只想能够添加一个Java类,这样它就已经有了那些代码,我试着做了: 基本上这个东西需要在xml中,但我不知道如何正确地编写它,我以为到处都写${filename}就可以了,但它不起作用。总而言之,我希望文件的名称写在我写“${filename}”的地方,我该怎么做呢?

  • 问题内容: 这是在采访中问我的,这是我提供的解决方案: 有没有更有效的方法可以做到这一点? 编辑:更正的长度方法。 问题答案: 稍有改进,但是在主循环之后,当到达另一个输入数组的末尾时,可以用来复制其中一个输入数组的结尾。但是,那不会改变你解决方案的性能特征。

  • 本文向大家介绍手写代码:冒泡排序相关面试题,主要包含被问及手写代码:冒泡排序时的应答技巧和注意事项,需要的朋友参考一下 参考回答: