📅  最后修改于: 2023-12-03 15:37:46.132000             🧑  作者: Mango
给定一个整数数组,你需要计算出在任意给定的相同索引处交换两个元素后可能的唯一数组的数量。
这道题可以用哈希表来统计每个数的个数,然后再用排列组合的方式计算出答案。具体地,设有$n$个重复数,其中第$i$个重复数的数量为$a_i$,那么总共的唯一数组的数量为:$$ ans = \frac{n!}{\prod_{i=1}^{n}a_i} $$
from collections import Counter
class Solution:
def uniqueExchange(self, nums: List[int]) -> int:
# 统计每个数的个数
counter = Counter(nums)
n = len(nums)
# 计算唯一数组的数量
ans = 1
for cnt in counter.values():
ans *= cnt
ans = math.factorial(n) // ans
return ans
时间复杂度:$O(N)$
空间复杂度:$O(N)$