收藏!月薪11万+引爆圈,程序员转岗大模型赛道的红利密码
2026/1/22 12:08:01
给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
输入共两行。
第一行,两个正整数 N,C。
第二行,N 个正整数,作为要求处理的那串数。
一行,表示该串正整数中包含的满足 A−B=C 的数对的个数。
public class Main{ public static void main(String args[]){ Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int c=scanner.nextLong(); Long ans=0L; Map<Long,Long> map=new HashMap<>(); long[] a=new long[n+1]; for(int i=1;i<=n;i++){ a[i]=scanner.nextInt(); map.put(a[i],map.getOrDefault(a[i],0L)+1); a[i]-=c; } for(int i=1;i<=n;i++){ ans+=map.getOrDefault(a[i],0L); } System.out.printf(ans); scanner.close(); return ; } }通过 A - B = C → B = A - C 的变形,把 “找 B” 转化为 “查 B 的出现次数”,用 HashMap 实现 O (1) 快速查询,整体时间复杂度 O (n);
map.put(
a[i], // 键:当前要统计的数字(比如数组里的4、7、1等)
map.getOrDefault(a[i], 0L) + 1 // 值:更新后的出现次数
);
键和值对应完成出现次数的记录