题目1:数组元素的目标和

给定两个升序排序的有序数组A和B,以及一个目标值x

数组下标从0开始。

请你求出满足 A[i]+B[j]=x的数对 (i,j)

数据保证有唯一解。

输入格式

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

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

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

输出格式

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

输入样例:

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

输出样例:

1 1

代码

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;

//双指针结合二分查找
int main()
{
    int n;
    int m;
    cin >> n;
    cin >> m;
    int sum;
    cin >> sum;
    vector<int> vec1;
    vector<int> vec2;
    for (int i = 0; i < n; i++)
    {
        int tmp;
        cin >> tmp;
        vec1.push_back(tmp);
    }
    for (int i = 0; i < m; i++)
    {
        int tmp;
        cin >> tmp;
        vec2.push_back(tmp);
    }

    for (unsigned int i = 0; i < vec1.size(); i++)
    {
                //二分查找
        int pre = 0;
        int post = vec2.size() - 1;
        while (pre <= post)
        {
            int mid = (pre + post) / 2;
            if (vec1[i] + vec2[mid] == sum)
            {
                cout << i << " " << mid << endl;
                return 0;
            }
            else if (vec1[i] + vec2[mid] > sum)
            {
                post = mid - 1;
            }
            else if (vec1[i] + vec2[mid] < sum)
            {
                pre = mid +1;
            }
        }
    }
    return 0;
}

 

posted on 2022-09-21 09:38  yc-limitless  阅读(25)  评论(0)    收藏  举报