Algorithm 在排序数组中查找一对和为K的整数
给定一个排序的整数数组,我们如何找到一对和为K的整数 e、 g.Algorithm 在排序数组中查找一对和为K的整数,algorithm,array-algorithms,Algorithm,Array Algorithms,给定一个排序的整数数组,我们如何找到一对和为K的整数 e、 g.array=1,3,5,6,10,K=6,答案是1和5 时间复杂度应该最小化。有一个线性(O(n))解决方案 取一个哈希表,在遍历数组时检查当前元素是否已经在哈希表中-如果已经在哈希表中,那么您已经找到了答案。否则,插入等于K减去当前元素的数字。适用于非排序数组,顺便说一句 int[] ar = new int[] { 1, 4, 3, 5 }; int K = 6; HashSet<int> set = new Ha
array=1,3,5,6,10
,K=6
,答案是1和5
时间复杂度应该最小化。有一个线性(O(n))解决方案
取一个哈希表,在遍历数组时检查当前元素是否已经在哈希表中-如果已经在哈希表中,那么您已经找到了答案。否则,插入等于K减去当前元素的数字。适用于非排序数组,顺便说一句
int[] ar = new int[] { 1, 4, 3, 5 };
int K = 6;
HashSet<int> set = new HashSet<int>();
foreach (int a in ar)
{
if (set.Contains(a))
{
Console.WriteLine(a + ", " + (K - a));
break;
}
set.Add(K - a);
}
int[]ar=newint[]{1,4,3,5};
int K=6;
HashSet=newhashset();
foreach(ar中的int a)
{
if(集合包含(a))
{
Console.WriteLine(a+“,”+(K-a));
打破
}
增加(K-a);
}
你可能想看看这篇博文:
我的方法是对列表进行二进制搜索,查找K/2
,然后向左走一个变量a
,向右走另一个变量b
,试图找到解决方案a+b=K
我们的想法是以小于或等于K/2
的最大数字开始a
,以大于a
的最小数字开始b
。同样,使用二进制搜索查找a
,并将b
作为数组中的下一个元素。然后
- 如果
,则a+b=K
返回(a,b)
- 如果
,则将a+b
移动到右侧的一个位置b
- 如果
,则将a+b>K
移动到左侧一个位置a
a
,在数组结束处启动b
,然后执行以下操作
- 如果
,则a+b=K
返回(a,b)
- 如果
,则将a+b
移动到右侧的一个位置a
- 如果
,则将a+b>K
移动到左侧一个位置b
函数findpairzero(arr){
function findpairzero(arr) {
let left = 0;
let right = arr.length - 1;
while (left < right) {
if (arr[left] + arr[right] === 0) {
return [arr[left], arr[right]];
} else if (arr[left] + arr[right] > 0) {
right--;
} else {
left++;
}
}
}
console.log(findpairzero([-4, -3, -2, -1, 0, 3, 2, 4, 5]));
设左=0;
let right=arr.length-1;
while(左<右){
如果(arr[左]+arr[右]==0){
返回[arr[左]、arr[右];
}否则如果(arr[左]+arr[右]>0){
对--;
}否则{
左++;
}
}
}
log(findpairzero([-4,-3,-2,-1,0,3,2,4,5]);
听起来很像今天流传的这篇博文:你们大学的学术政策和你们教授的政策允许你们在互联网上要求别人回答你们的家庭作业问题吗?这个问题以前被问过一百万次……甚至在这里。在发布问题之前,请至少做一次谷歌搜索。就解决方案而言..为了减少时间,请使用哈希表。要最小化空间,请对数组进行排序,让两个指针分别指向一端,并根据需要增减它们。您的意思是您有一个已排序的数组。但是示例数组没有排序。是哪一个?