数组元素的目标和

描述

 

给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。 请你求出满足A[i] + B[j] = x的数对(i, j)。

数据保证有唯一解。

 

输入

 

第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。

第二行包含n个整数,表示数组A。

第三行包含m个整数,表示数组B。

数组长度不超过5000000。 同一数组内元素各不相同。 1≤数组元素≤10^9

 

输出

 

共一行,包含两个整数 i 和 j。

 

输入样例 1

4 5 6
1 2 4 7
3 4 6 8 9

输出样例 1

1 1

 

个人解法

将对其中一个数组进行遍历,在遍历过程中利用双指针算法进行优化

代码如下

#include <iostream>using namespace std;
​
const int N=5000010;
​
int n,m,q[N],w[N],sum,cnt;
int main()
{
    cin>>n>>m>>sum;
    for(int i=0;i<n;i++)
    cin>>q[i];
    for(int i=0;i<m;i++)
    cin>>w[i];
    int l=0,r=m-1,mid=(l+r)>>1;
    for(int i=0;i<n;i++)
    {
        l=0,r=m-1;
        while(l<r)
        {
            mid=(l+r)>>1;
            if(q[i]+w[mid]>=sum)
                r=mid;
            else
                l=mid+1;
        }
        if(q[i]+w[l]==sum)
        {
            cout<<i<<' '<<l<<endl;
            return 0;
        }
    }
}
View Code

 

posted @ 2021-08-30 10:21  喵喵不嗷唔  阅读(108)  评论(0)    收藏  举报