📅  最后修改于: 2023-12-03 14:56:52.477000             🧑  作者: Mango
给定一个整数数组nums,找到并返回满足任意两个元素的和都等于第三个元素的三元组的个数。注意,这里元素的顺序是不重要的。
我们可以先将数组排序。然后遍历数组中的每个元素num[i],并在数组中查找另外两个数num[j]、num[k],使得num[j] + num[k] = num[i]。这样就可以找到满足要求的三元组。
这个方法的时间复杂度是O(n^2 logn),其中n是数组的长度,因为我们要对数组排序并进行两层嵌套的循环。如果使用哈希表可以将时间复杂度优化到O(n^2)。
def countTriplets(nums):
nums.sort()
count = 0
n = len(nums)
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
if nums[i] + nums[j] == nums[k]:
count += 1
return count
def countTriplets(nums):
count = 0
n = len(nums)
hashmap = {}
for i in range(n):
for j in range(i+1, n):
if nums[i] + nums[j] in hashmap:
count += hashmap[nums[i] + nums[j]]
hashmap.setdefault(nums[i] + nums[j], 0)
hashmap[nums[i] + nums[j]] += 1
return count
这道题目看似简单,其实在时间复杂度的优化上有很多经验可以借鉴。对于数组问题,我们需要灵活运用排序、双指针法、哈希表等数据结构和算法。