湘西土家族苗族自治州网站建设_网站建设公司_导航菜单_seo优化
2026/1/22 11:23:10 网站建设 项目流程

题目描述

给出一串正整数数列以及一个正整数 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);

1.第一次循环完成变形

map.put(
a[i], // 键:当前要统计的数字(比如数组里的4、7、1等)
map.getOrDefault(a[i], 0L) + 1 // 值:更新后的出现次数
);
键和值对应完成出现次数的记录

2.第二次循环输出答案

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询