LeetCode-1534. 统计好三元组【数组 枚举】

2023-12-13 13:38:52

题目描述:

给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。

如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。

  • 0 <= i < j < k < arr.length
  • |arr[i] - arr[j]| <= a
  • |arr[j] - arr[k]| <= b
  • |arr[i] - arr[k]| <= c
    其中 |x| 表示 x 的绝对值。

返回 好三元组的数量

示例 1:
输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出:4
解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。

示例 2:
输入:arr = [1,1,2,2,3], a = 0, b = 0, c = 1
输出:0
解释:不存在满足所有条件的三元组。

提示:
3 <= arr.length <= 100
0 <= arr[i] <= 1000
0 <= a, b, c <= 1000

解题思路一:由于arr.length不大可以进行暴力枚举。

class Solution:
    def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
        def judge_3(x,y,z,a,b,c):
            if abs(x-y)<=a and abs(y-z)<=b and abs(x-z)<=c:
                return True
            return False
        n = len(arr)
        ans = 0
        for i in range(n-2):
            for j in range(i+1,n-1,1):
                for k in range(j+1,n,1):                    
                    if judge_3(arr[i],arr[j],arr[k],a,b,c):
                        ans += 1
        return ans    

时间复杂度:O(n3) 3个for循环
空间复杂度:O(1)

解题思路二:优化算法,先只考虑二元组 (j,k),题目剩下的部分就是得到满足条件l <= arr[i] <= r的arr[i]的个数。(其中l,r是i需要满足题目中的条件的一个交集)

如何统计l <= arr[i] <= r的arr[i]的个数?
这里用的是前缀和。即下面的total。
当k 大于等于arr[j]的时候前缀和加一

class Solution:
    def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
        ans = 0
        n = len(arr)
        total = [0] * 1001
        for j in range(n):
            for k in range(j + 1, n):
                if abs(arr[j] - arr[k]) <= b:
                    lj, rj = arr[j] - a, arr[j] + a
                    lk, rk = arr[k] - c, arr[k] + c
                    l = max(0, lj, lk)
                    r = min(1000, rj, rk)
                    if l <= r:
                        ans += total[r] if l == 0 else total[r] - total[l - 1]
            for k in range(arr[j], 1001):
                total[k] += 1
        
        return ans

时间复杂度:O(n2)两个for
空间复杂度:O(S)前缀和

解题思路三:0


文章来源:https://blog.csdn.net/qq_45934285/article/details/134848286
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。