二进制搜索的想法在排序数组的情况下完美地工作。我们可以对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)??
上述方法在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}”的地方,我该怎么做呢?
问题内容: 这是在采访中问我的,这是我提供的解决方案: 有没有更有效的方法可以做到这一点? 编辑:更正的长度方法。 问题答案: 稍有改进,但是在主循环之后,当到达另一个输入数组的末尾时,可以用来复制其中一个输入数组的结尾。但是,那不会改变你解决方案的性能特征。
本文向大家介绍手写代码:冒泡排序相关面试题,主要包含被问及手写代码:冒泡排序时的应答技巧和注意事项,需要的朋友参考一下 参考回答: