题目
给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。
数组下标从 0 开始。
请你求出满足 A[i]+B[j]=x 的数对 (i,j)。
数据保证有唯一解。
输入
分别为第一个数组的长度,第二个数组的长度和目标值x
4 5 6
第一个数组
1 2 4 7
第二个数组
3 4 6 8 9
输出
1 1
public class 双指针_数组元素的目标和{
public static void main(String[] args) {
//传入数据
Scanner in = new Scanner(System.in);
int n = in.nextInt(), m = in.nextInt(), x = in.nextInt();
int[] a = new int[n], b = new int[m];
for (int i = 0; i<n; i++) {a[i]=in.nextInt();}
for (int i = 0; i<m; i++) {b[i]=in.nextInt();}
//创建双指针i和j,i从a数组的开头开始,j从b数组的结尾开始
for (int i = 0, j = m-1; i<n; i++){
//因为两个数组有序,所以当a[i]+b[j]严格意义上大于x的时候,得知当前的b[j]过大,所以就j--
while (j>=0 && (a[i]+b[j]) > x) {j--;}
//如果a[i]+b[j]不大于x时,只有两种可能,就是小于或者等于
//等于的话直接输出下标,然后break,因为解是唯一的
//小于则将指针i右移一位,进行下一轮的对比
if (a[i]+b[j] == x) {
System.out.println(i + " " + j);
break;
}
}
}
}
今天的题好简单!芜湖~打游戏去了
声明:算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流