2475. 数组中不等三元组的数目 - 力扣(LeetCode)


我们要找的是满足以下条件的三元组 (i, j, k):
-
-
(三者两两不同)
解法思路:
我们可以按以下思路来解决:
-
计数每个数字的出现次数。
-
枚举所有不同的三元组组合数,通过数学组合方式。
-
避免暴力三重循环(时间复杂度太高)。
步骤:
-
统计每个数字的出现次数。
-
将不同的数放入一个列表中,对这个列表进行组合。
-
每个组合 (a, b, c) 对应的有效三元组数是:
示例代码(Python):
from collections import Counter
from itertools import combinations
def count_unique_triplets(nums):
counter = Counter(nums)
unique_vals = list(counter.keys())
res = 0
for a, b, c in combinations(unique_vals, 3):
res += counter[a] * counter[b] * counter[c]
return res
示例:
nums = [1, 2, 3, 4]
# 输出:4,因为组合是 (1,2,3), (1,2,4), (1,3,4), (2,3,4)
你也可以直接用暴力三重循环方法,如果数据量不大。但如果数据很多,上面的方案更高效。
1159

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



