返回
Python 解决 leetcode 2176. Count Equal and Divisible Pairs in an Array(带详细注释)
后端
2024-02-17 23:59:12
题目
给定一个整数数组 nums
和一个正整数 k
,请您计算有多少个索引 i
和 j
满足 0 <= i < j < nums.length
且 nums[i] == nums[j]
且 (i * j) % k == 0
。
提示:
1 <= nums.length <= 2 * 10^4
1 <= nums[i] <= 10^4
1 <= k <= 10^4
Python 解法
def count_equal_and_divisible_pairs(nums, k):
"""
计算有多少个索引 i 和 j 满足 0 <= i < j < nums.length 且 nums[i] == nums[j] 且 (i * j) % k == 0。
参数:
nums: 给定的整数数组
k: 正整数
返回:
满足条件的索引对数量
"""
# 使用哈希表存储每个数字出现的次数
num_counts = {}
for num in nums:
num_counts[num] = num_counts.get(num, 0) + 1
# 统计满足条件的索引对数量
count = 0
for num, count in num_counts.items():
# 如果 k 是偶数,并且 num 是 k 的一半,那么需要特殊处理,因为 (num * num) % k == 0
if k % 2 == 0 and num == k // 2:
count -= 1
# 计算满足条件的索引对数量
count += count * (count - 1) // 2
return count
# 测试代码
nums = [3, 1, 2, 2, 2, 1, 3]
k = 2
result = count_equal_and_divisible_pairs(nums, k)
print(result) # 输出:4
代码注释
-
使用哈希表存储每个数字出现的次数:
num_counts = {} for num in nums: num_counts[num] = num_counts.get(num, 0) + 1
num_counts
是一个哈希表,num
是数字,num_counts[num]
是数字出现的次数。get()
方法用于获取哈希表中的值,如果键不存在,则返回默认值 0。
-
统计满足条件的索引对数量:
count = 0 for num, count in num_counts.items(): # 如果 k 是偶数,并且 num 是 k 的一半,那么需要特殊处理,因为 (num * num) % k == 0 if k % 2 == 0 and num == k // 2: count -= 1 # 计算满足条件的索引对数量 count += count * (count - 1) // 2
count
是满足条件的索引对数量。- 对于每个数字
num
,计算满足条件的索引对数量。 - 如果
k
是偶数,并且num
是k
的一半,那么需要特殊处理,因为(num * num) % k == 0
。 - 计算满足条件的索引对数量,使用公式
count += count * (count - 1) // 2
,因为对于每个数字num
,最多可以与count - 1
个其他数字形成满足条件的索引对。
-
测试代码:
nums = [3, 1, 2, 2, 2, 1, 3] k = 2 result = count_equal_and_divisible_pairs(nums, k) print(result) # 输出:4
- 测试代码创建了一个整数数组
nums
和一个正整数k
,然后调用count_equal_and_divisible_pairs()
函数计算满足条件的索引对数量。 - 输出结果为 4,表示有 4 个索引对满足条件。
- 测试代码创建了一个整数数组