假设我们有一个称为nums的数字列表和另一个值目标,我们必须找到存在的三元组(i <j <k)的数目,以使nums [i] + nums [j] + nums [k] <目标。
因此,如果输入像nums = [-2、6、4、3、8],target = 12,则输出将是5,因为三元组是:[-2,6,4],[-2 ,6,3],[− 2,4,3],[− 2,4,8],[− 2,3,8]
为了解决这个问题,我们将遵循以下步骤-
排序列表编号
回答:= 0
n:= nums的大小
对于范围在0到n-1之间的i
当k> j和nums [i] + nums [k] + nums [j]> =目标时,执行
如果j与k相同,则
k:= k − 1
k:= n − 1
对于范围为i +1到n-1的j
ans:= ans + k − j
返回ans
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, target): nums.sort() ans = 0 n = len(nums) for i in range(n): k = n − 1 for j in range(i + 1, n): while k > j and nums[i] + nums[k] + nums[j] >= target: k -= 1 if j == k: break ans += k − j return ans ob1 = Solution() nums = [−2, 6, 4, 3, 8] target = 12 print(ob1.solve(nums, target))
[-2, 6, 4, 3, 8], 12
输出结果
5