题目描述
给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A - B =C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
该题来自洛谷p1102
输入格式
输入共两行。
第一行,两个正整数 N,C。
第二行,N 个正整数,作为要求处理的那串数。
输出格式
一行,表示该串正整数中包含的满足 A - B=C 的数对的个数。
输入输出样例
4 1
1 1 2 3
3
说明/提示
对于 75% 的数据,1 <=N <=2000。
对于 100% 的数据,1 <=N 2 * 10^5,0 <= ai<2^30,1<= C <= 2^30。
解答
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class A-B {
public static void main(String[] args) {
//洛谷p1102A-B数值对
Scanner scan = new Scanner(System.in);
Map<Integer,Integer>map = new HashMap<>();
int n = scan.nextInt();//表示几个正整数
int c = scan.nextInt();//表示正整数C
int []arr =new int[n];//数组接收数
for (int i = 0; i < n; i++) {
arr[i]= scan.nextInt();
map.put(arr[i],map.getOrDefault(arr[i],0)+1);//存入Map,如果没有出现则默认为0,出现了就加1
}
long res = 0;//长型保证覆盖所有案例
for (int i = 0; i < n; i++) {
int b = arr[i]-c;//因为a-b=c,所以b按理应该为某一个map的key
res+=map.getOrDefault(b,0);//如果b为key则加上如果没有则默认加0(即不加)
}
System.out.println(res);
}
}