我是靠谱客的博主 虚心白羊,这篇文章主要介绍双指针算法-数组元素的目标和,现在分享给大家,希望可以做个参考。

题目

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

数组下标从 00开始。

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

数据保证有唯一解。

输入格式

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

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

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

输出格式

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

暴力做法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> using namespace std; const int N=100010; int a[N],b[N]; int main() { int n,m,x; cin>>n>>m>>x; //bool flag=false; for(int i=0;i<n;i++)cin>>a[i]; for(int i=0;i<m;i++)cin>>b[i]; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(a[i]+b[j]==x) //flag=true; cout<<i<<" "<<j<<endl; } } return 0; }

双指针做法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> using namespace std; const int N=100010; int a[N],b[N]; int main() { int n,m,x; cin>>n>>m>>x; //bool flag=false; 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(j>=0&&a[i]+b[j]>x)j--; if(a[i]+b[j]==x&&j>=0) //flag=true; cout<<i<<" "<<j<<endl; } return 0; }

最后

以上就是虚心白羊最近收集整理的关于双指针算法-数组元素的目标和的全部内容,更多相关双指针算法-数组元素内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部