返回

Count Array Pairs Divisible by K 的 Python 巧解

后端

Python 解题:LeetCode 2183. Count Array Pairs Divisible by K

引言

本期算法专栏聚焦 LeetCode 2183. Count Array Pairs Divisible by K 这道难题,它出现在 Weekly Contest 281 中,难度为 Hard。此题要求计算一个数组中能被给定常数 K 整除的元素对数量。我们将以 Python 语言为您呈现一种巧妙的解法,助您征服这道难题。

思路解析

要解决此题,关键在于理解数学中关于除数的特性。对于给定的数组 nums 和常数 K,我们可以定义一个新数组 remainders,其中 remainders[i]nums[i] % K 的值。

根据除数的性质,nums[i]nums[j] 能被 K 整除当且仅当 remainders[i] + remainders[j] == Kremainders[i] + remainders[j] == 0

Python 实现

def countKDivPairs(nums, k):
    # 初始化余数哈希表
    remainders = {}

    # 统计余数出现次数
    for num in nums:
        remainder = num % k
        if remainder in remainders:
            remainders[remainder] += 1
        else:
            remainders[remainder] = 1

    # 统计能被 K 整除的元素对数量
    count = 0
    for remainder in remainders:
        # 同余为 0 或 K 的元素对
        if remainder == 0 or remainder == k:
            count += remainders[remainder] * (remainders[remainder] - 1) // 2
        # 同余不同的元素对
        else:
            count += remainders[remainder] * remainders[k - remainder]

    return count

复杂度分析

  • 时间复杂度:O(N),其中 N 为数组 nums 的长度。
  • 空间复杂度:O(K),其中 K 为常数。

总结

通过利用除数的性质并巧妙地利用哈希表,我们可以高效地解决 LeetCode 2183. Count Array Pairs Divisible by K 这道难题。希望本篇文章能助您深入理解数学除数的概念并提升算法解决能力。

SEO 优化