题目描述
双指针算法
样例
import java.util.*;
public class Main{
/*
如果a数字和b数组不是有序的 需要先弄成有序的
a + b = x 如果a的可能值变大,那么b的可能值就变小
由于a和b都是升序数组 所以我们一个指针指向a的左端,右移a变大,一个指针指向b的右端(而不是左端),左移b变小
判断条件就是,两个数字的相加如果大于给定的x, 指向b的右端的指针--
对于a + b = x 我们可以理解为a + b >= x
*/
static final int N = 100010;
static int[] a = new int[N];
static int[] b = new int[N];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int x = sc.nextInt();
for(int i = 0;i < n;i++){
a[i]=sc.nextInt();
}
for(int i = 0;i < m;i++){
b[i]=sc.nextInt();
}
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){
System.out.println(i+" "+j);
break;
}
}
}
}