返回
Count Array Pairs Divisible by K 的 Python 巧解
后端
2023-11-28 21:00:47
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] == K
或 remainders[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 这道难题。希望本篇文章能助您深入理解数学除数的概念并提升算法解决能力。