程序从总和小于或小于目标的数组中检查三元组的数量

假设我们有一个称为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
    猜你喜欢