AcWing 800. 数组元素的目标和-Java-注释
原题链接
简单
作者:
snake_skin
,
2024-03-15 21:38:47
,
所有人可见
,
阅读 12
题目描述
样例
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int N = 100010;
static int[] a = new int[N];
static int[] b = new int[N];
static int n;
static int m;
static int x;
public static void main(String[] args) throws IOException{
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
x = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i = 0; i < m; i++) {
b[i] = Integer.parseInt(st.nextToken());
}
// 先遍历a[]
for(int i = 0,j=m-1; i < n; i++) {
/*
* 由于a b是单调递增的数组,
* 如果b最后的数值加上a最前的数值大于目标值,
* 那么由于递增的性质,a后面的所有任一元素加上b的值都不可能等于目标值
*/
// b[]最后开始,如果b后面的值加上a前面的值大于目标值
// 说明这个b的值加上a的任一值永远不可能等于目标值
while(j > 0 && a[i] + b[j] > x) j--;
// 到此说明 a[i]+b[j]小于等于目标值 只需要判断是否目标值,不是目标值则继续i+1
if(a[i] + b[j] == x) {
System.out.print(i + " " + j);
break;
}
}
}
}