java求数组中满足给定和的数对,找出两个数组中满足给定和的数对

/*******************************************************************************************************************************************

3.找出两个数组中满足给定和的数对

问题描述:有两个数组arr1和arr2,两个数组均已经排好序,现在要找出这样的x和y使得x+y=sum,其中sum已知,x是arr1中某个元素,y是arr2中的某个元素。

解决方案:既然数组arr1和arr2中的元素已经排好序了,那么问题就简单了不少。假设arr1[i] + arr2[j] > sum,若arr1下标不变,那么要找到满足条件的x和y,

只能取arr2中下标< j 的元素和arr1[i]相加,结果才可能等于sum;假设arr1[i] + arr2[j] < sum,若arr2的下标不变,那么要找到满足条件的x和y,

只能取arr1中下标 > i 的元素和arr2[j]相加,结果才可能等于sum。因此我们可以设置两个指针 i 和 j ,分别指向arr1的开始位置和arr2结束位置,

这时 i 只能不断变大,j 只能不断变小,直到超过了数组的范围。通过代码更好理解,看代码吧~~时间复杂度是O(n+m),n和m分别是arr1和arr2的大小。

************************************************************************************************************************************************/

bool getthesum(int arr1[], int arr2[], int length1, int length2, int sum)

{

bool find = false;

int i = 0;

int j = length2 - 1;

while( i < length1 && j >= 0)

{

if (arr1[i] + arr2[j] < sum)

{

i++;

}

else if(arr1[i] + arr2[j] > sum)

{

j--;

}

else if(arr1[i] + arr2[j] == sum)

{

find = true;

printf("arr1[%d]=%d and arr2[%d]=%d equals to %d\n", i, arr1[i], j, arr2[j], sum);

i++;

j--;

}

}

return find;

}

int _tmain(int argc, _TCHAR* argv[])

{

int arr1[7] = {1, 2, 3, 4, 5, 6, 7};

int arr2[7] = {3, 4, 5, 6, 7, 8, 9};

getthesum(arr1, arr2, 7, 7, 12);

getchar();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值