LeetCode1534. 统计好三元组

一. 题目
  1. 题目
    在这里插入图片描述

  2. 示例
    在这里插入图片描述

二. 方法一: 暴力法
  1. 解题思路

  2. 解题代码

    def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
        size = len(arr)
        count = 0
        for i in range(0, size - 2):
            for j in range(i + 1, size - 1):
                for k in range(j + 1, size):
                    if abs(arr[i] - arr[j]) <= a and abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c:
                        count += 1
        return count
    
  3. 分析
    时间复杂度: O(n^3)
    空间复杂度: O(1)

三. 方法二: 暴力法 + 裁剪
  1. 解题思路

  2. 解题代码

    def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
        size = len(arr)
        count = 0
        for i in range(0, size - 2):
            for j in range(i + 1, size - 1):
                if abs(arr[i] - arr[j]) > a:
                    continue
                for k in range(j + 1, size):
                    if abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c:
                        count += 1
        return count
    
  3. 分析
    时间复杂度: O(n^3)
    空间复杂度: O(1)

相较于方法一, 运行时间降低了300ms左右
在这里插入图片描述


版权声明:本文为bingque6535原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。