1534.统计好三元组:系列题之-easy等级先模拟

【LetMeFly】1534.统计好三元组:系列题之-easy等级先模拟

力扣题目链接:https://leetcode.cn/problems/count-good-triplets/

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

如果三元组 (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

解题方法:三层循环

第一层用$i$从$0$到$n-1$,第二层用$j$从$i+1$到$n-1$,第三层用$k$从$j+1$到$n-1$,判断这个三元组是否为“好三元组”。

  • 时间复杂度$O(len(arr)^3)$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Author: LetMeFly
* @Date: 2025-04-15 10:24:13
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-04-15 10:28:19
*/
class Solution {
public:
int countGoodTriplets(vector<int>& arr, int a, int b, int c) {
int ans = 0, n = arr.size();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (abs(arr[i] - arr[j]) > a) {
continue;
}
for (int k = j + 1; k < n; k++) {
ans += abs(arr[j] - arr[k]) <= b && abs(arr[i] - arr[k]) <= c;
}
}
}
return ans;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
'''
Author: LetMeFly
Date: 2025-04-15 10:28:55
LastEditors: LetMeFly.xyz
LastEditTime: 2025-04-15 10:34:14
'''
from typing import List

class Solution:
def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int:
# return sum(abs(arr[i] - arr[j]) <= a and abs(arr[j] - arr[k]) <= b and abs(arr[j] - arr[k]) <= c for k in range(j + 1, len(arr)) for j in range(i + 1, len(arr)) for i in range(len(arr)))
return sum(abs(arr[i] - arr[j]) <= a and abs(arr[j] - arr[k]) <= b and abs(arr[i] - arr[k]) <= c for i in range(len(arr)) for j in range(i + 1, len(arr)) for k in range(j + 1, len(arr)))

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* @Author: LetMeFly
* @Date: 2025-04-15 10:35:43
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-04-15 10:37:19
*/
class Solution {
public int countGoodTriplets(int[] arr, int a, int b, int c) {
int ans = 0, n = arr.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if (Math.abs(arr[i] - arr[j]) <= a && Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c) {
ans++;
}
}
}
}
return ans;
}
}

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
* @Author: LetMeFly
* @Date: 2025-04-15 10:39:01
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-04-15 10:43:14
*/
package main

func abs1534(a int) int {
if a < 0 {
return -a
}
return a
}

func countGoodTriplets(arr []int, a int, b int, c int) (ans int) {
for i := range arr {
for j := i + 1; j < len(arr); j++ {
for k := j + 1; k < len(arr); k++ {
if abs1534(arr[i] - arr[j]) <= a && abs1534(arr[j] - arr[k]) <= b && abs1534(arr[i] - arr[k]) <= c {
ans++
}
}
}
}
return
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


1534.统计好三元组:系列题之-easy等级先模拟
https://blog.letmefly.xyz/2025/04/15/LeetCode 1534.统计好三元组/
作者
发布于
2025年4月15日
许可协议