2341. 数组能形成多少数对 - 力扣(LeetCode)


可以通过以下步骤来解决这个问题:
-
统计每个整数的出现次数:首先需要统计
nums中每个整数出现的次数。这可以通过使用一个哈希表(字典)来实现。 -
计算可以配对的整数:对于每个整数的出现次数,如果出现次数是偶数,那么所有的这些整数都可以配对;如果是奇数,则最多有一个整数无法与其他相同整数配对。
-
计算结果:根据每个整数的出现次数,我们可以得到可以配对的数对的数量和剩下的无法配对的整数数量。
步骤实现:
-
统计每个整数的出现次数。
-
计算每个整数可以形成的数对数,剩余的整数数量。
-
返回结果。
代码实现:
from collections import Counter
def count_pairs(nums):
# 统计 nums 中每个整数的出现次数
count = Counter(nums)
pairs = 0 # 记录形成的数对数
leftover = 0 # 记录剩余的数字数目
# 遍历每个数字和它的出现次数
for num, freq in count.items():
pairs += freq // 2 # 每两个相同的数可以形成一个数对
leftover += freq % 2 # 不能配对的数字个数
return [pairs, leftover]
# 示例
nums = [1, 3, 2, 1, 3, 2, 1]
print(count_pairs(nums)) # 输出: [2, 1]
解释:
-
我们使用
collections.Counter来统计数组中每个数字的出现次数。 -
对于每个数字,如果它的出现次数是偶数,则可以完全配对,形成
次数 // 2个数对。如果是奇数,则可以配对次数 // 2次,剩下一个无法配对。 -
最终返回的结果是
[pairs, leftover],其中pairs是形成的数对数,leftover是无法配对的整数数量。
示例解析:
对于 nums = [1, 3, 2, 1, 3, 2, 1]:
-
数字
1出现了 3 次,能配对 1 对,剩下 1 个未配对。 -
数字
3出现了 2 次,能配对 1 对,剩下 0 个未配对。 -
数字
2出现了 2 次,能配对 1 对,剩下 0 个未配对。
因此,最终输出 [2, 1],即形成了 2 对数,剩下 1 个数字未配对。

157

被折叠的 条评论
为什么被折叠?



