一.问题描述

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

数组下标从 0 开始。

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

二.设计思路

  1. i 指针从 a数组 从前往后 开始遍历
  2. j 指针从 b数组 从后往前 开始遍历
  3. 若 a[i]+b[j]>k 说明要缩小区间使和变小 即 j–,反之i++

三.流程图

四.伪代码 

1

五.代码实现 

#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int main(){
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=0;i<m;i++)cin>>b[i];
    for(int i=0,j=m-1;i<n;i++){
        while(a[i]+b[j]>k)j--;
        if(a[i]+b[j]==k){
            cout<<i<<" "<<j;
            break;
        }
    }
    return 0;
}

 

posted on 2023-05-08 19:05  leapss  阅读(23)  评论(0)    收藏  举报