程序从总和小于或小于目标的数组中检查三元组的数量
假设我们有一个称为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