洛谷 P1102 A-B 数对 (三种解法)

博客详细介绍了洛谷P1102题目的解法,包括题意理解、解题思路及三种解决方案:利用map统计、二分查找和双指针算法。每种方法都有对应的代码实现,其中双指针算法在测评中表现出最佳的时间效率。
摘要由CSDN通过智能技术生成

P1102 A-B 数对

题意

给出一串数以及一个数字 C,要求计算出所有 A - B = C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

1 ≤ N ≤ 2 × 1 0 5 1≤N≤2×10^5 1N2×105

思路

将式子变形可得 A - C = B ,那么我们就可以将 B 中每个数出现的次数插入到map里面,然后对于每一个 A - C ,在map中找其出现的次数,累加到最终答案。

或者,我们可以在对B排序,在 B 中找到 A - C 的左右边界,做差后累加到最终答案

亦或者,在排完序之后,对这个有序序列,我们可以使用双指针算法,维护两个右端点 r 1 , r 2 r1 , r2 r1,r2 , 每次 r 1 r1 r1 右移到 a [ r 1 ] − a [ l ] < c a[r1] - a[l] < c a[r1]a[l]<c 的最后位置的下一位,r2 右移到满足 a [ r 2 ] − a [ l ] < = c a[r2] - a[l] <= c a[r2]a[l]<

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值