想法
- 双指针算法就是对一般的2重循环的一种优化,可以先写出原来的写法,时间复杂度是O(m * n )
- 然后对其进行优化,改为一重循环,时间复杂度变成O(n+m)
- 防止时间超时的问题(自己之前写的就是超时,原来的方法)
思路
- 指针变量i 从前往后,指针变量j 从后往前
- 如果a[i] + b[j] > x, 我们就让j --,往前移动
- 找到a[i] + b[j] == x, 输出就好(这个题规定只有一组符合要求)
代码
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int main()
{
int n, m, x;
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(a[i] + b[j] == x)
{
cout << i << " " << j ;
}
}
return 0;
}