给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两个数组的大小都为 n ,同时给你一个整数 diff ,统计满足以下条件的 数对 (i, j) :

  • 0 <= i < j <= n - 1 
  • nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff.

请你返回满足条件的 数对数目 。

移项:

nums1[i]  - nums2[i]   <=  nums1[j]  -  nums2[j]  +  diff

令nums1[i]-nums2[i]为s,s[i]<=s[j]+diff   (j>i)

问题转为:固定j,求j前面有多少个数小于等于s[j]+diff

有序数组+二分查找:

从左向右遍历,维护一个有序列表,在有序列表中查找有多少个元素小于等于s[j]+diff 

用python的sortedList+bisect_right(找到小于等于目标值的个数)

from sortedcontainers import SortedList
class Solution:
    def numberOfPairs(self, nums1: List[int], nums2: List[int], diff: int) -> int:
        nums=[x-y for (x,y) in zip(nums1,nums2)]
        s1=SortedList()
        ans=0
        for num in nums:
            i=s1.bisect_right(num+diff)
            ans+=i
            s1.add(num)
        return ans
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.