双指针算法图解
- 两个数组都是从小到大,从而使得两个数组和的矩阵的每一行,每一列都是从小到大排列
- 循环初始化时,使两个指针指向矩阵的左上角,如果指向的数字比要找的数字大了,则找左边的数字(j–),如果指向的数字比要找的数字小了,则找下方的数字(i++)
代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010;
int n,m,x;
int a[N],b[N];
int main()
{
cin >> n >> m >> x;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < m; i++) cin >> b[i];
int i,j;
for(i = 0, j = m - 1; i < n; i++)
{
while(j >= 0 && a[i] + b[j] > x) j--;
if(j >= 0 && a[i] + b[j] == x) cout << i << " " << j << endl;
}
}