返回介绍

solution / 1800-1899 / 1885.Count Pairs in Two Arrays / README_EN

发布于 2024-06-17 01:03:13 字数 3574 浏览 0 评论 0 收藏 0

1885. Count Pairs in Two Arrays

中文文档

Description

Given two integer arrays nums1 and nums2 of length n, count the pairs of indices (i, j) such that i < j and nums1[i] + nums1[j] > nums2[i] + nums2[j].

Return _the number of pairs satisfying the condition._

 

Example 1:

Input: nums1 = [2,1,2,1], nums2 = [1,2,1,2]
Output: 1
Explanation: The pairs satisfying the condition are:
- (0, 2) where 2 + 2 > 1 + 1.

Example 2:

Input: nums1 = [1,10,6,2], nums2 = [1,4,1,5]
Output: 5
Explanation: The pairs satisfying the condition are:
- (0, 1) where 1 + 10 > 1 + 4.
- (0, 2) where 1 + 6 > 1 + 1.
- (1, 2) where 10 + 6 > 4 + 1.
- (1, 3) where 10 + 2 > 4 + 5.
- (2, 3) where 6 + 2 > 1 + 5.

 

Constraints:

  • n == nums1.length == nums2.length
  • 1 <= n <= 105
  • 1 <= nums1[i], nums2[i] <= 105

Solutions

Solution 1

class Solution:
  def countPairs(self, nums1: List[int], nums2: List[int]) -> int:
    n = len(nums1)
    d = [nums1[i] - nums2[i] for i in range(n)]
    d.sort()
    return sum(n - bisect_right(d, -v, lo=i + 1) for i, v in enumerate(d))
class Solution {
  public long countPairs(int[] nums1, int[] nums2) {
    int n = nums1.length;
    int[] d = new int[n];
    for (int i = 0; i < n; ++i) {
      d[i] = nums1[i] - nums2[i];
    }
    Arrays.sort(d);
    long ans = 0;
    for (int i = 0; i < n; ++i) {
      int left = i + 1, right = n;
      while (left < right) {
        int mid = (left + right) >> 1;
        if (d[mid] > -d[i]) {
          right = mid;
        } else {
          left = mid + 1;
        }
      }
      ans += n - left;
    }
    return ans;
  }
}
class Solution {
public:
  long long countPairs(vector<int>& nums1, vector<int>& nums2) {
    int n = nums1.size();
    vector<int> d(n);
    for (int i = 0; i < n; ++i) d[i] = nums1[i] - nums2[i];
    sort(d.begin(), d.end());
    long long ans = 0;
    for (int i = 0; i < n; ++i) {
      int j = upper_bound(d.begin() + i + 1, d.end(), -d[i]) - d.begin();
      ans += n - j;
    }
    return ans;
  }
};
func countPairs(nums1 []int, nums2 []int) int64 {
  n := len(nums1)
  d := make([]int, n)
  for i, v := range nums1 {
    d[i] = v - nums2[i]
  }
  sort.Ints(d)
  var ans int64
  for i, v := range d {
    left, right := i+1, n
    for left < right {
      mid := (left + right) >> 1
      if d[mid] > -v {
        right = mid
      } else {
        left = mid + 1
      }
    }
    ans += int64(n - left)
  }
  return ans
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文