题目
标题和出处
标题:统计好三元组
出处:1534. 统计好三元组
难度
1 级
题目描述
要求
给你一个整数数组 arr \texttt{arr} arr,以及 a \texttt{a} a、 b \texttt{b} b、 c \texttt{c} c 三个整数。请你统计其中好三元组的数量。
如果三元组 (arr[i], arr[j], arr[k]) \texttt{(arr[i], arr[j], arr[k])} (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个好三元组。
- 0 ≤ i < j < k < arr.length \texttt{0} \le \texttt{i} < \texttt{j} < \texttt{k} < \texttt{arr.length} 0≤i<j<k<arr.length
- |arr[i] - arr[j]| ≤ a \texttt{|arr[i] - arr[j]|} \le \texttt{a} |arr[i] - arr[j]|≤a
- |arr[j] - arr[k]| ≤ b \texttt{|arr[j] - arr[k]|} \le \texttt{b} |arr[j] - arr[k]|≤b
- |arr[i] - arr[k]| ≤ c \texttt{|arr[i] - arr[k]|} \le \texttt{c} |arr[i] - arr[k]|≤c
其中 |x| \texttt{|x|} |x| 表示 x \texttt{x} x 的绝对值。
返回好三元组的数量。
示例
示例 1:
输入:
arr
=
[3,0,1,1,9,7],
a
=
7,
b
=
2,
c
=
3
\texttt{arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3}
arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出:
4
\texttt{4}
4
解释:一共有
4
\texttt{4}
4 个好三元组:
[(3,0,1),
(3,0,1),
(3,1,1),
(0,1,1)]
\texttt{[(3,0,1), (3,0,1), (3,1,1), (0,1,1)]}
[(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
\texttt{arr = [1,1,2,2,3], a = 0, b = 0, c = 1}
arr = [1,1,2,2,3], a = 0, b = 0, c = 1
输出:
0
\texttt{0}
0
解释:不存在满足所有条件的三元组。
数据范围
- 3 ≤ arr.length ≤ 100 \texttt{3} \le \texttt{arr.length} \le \texttt{100} 3≤arr.length≤100
- 0 ≤ arr[i] ≤ 1000 \texttt{0} \le \texttt{arr[i]} \le \texttt{1000} 0≤arr[i]≤1000
- 0 ≤ a, b, c ≤ 1000 \texttt{0} \le \texttt{a, b, c} \le \texttt{1000} 0≤a, b, c≤1000
解法
思路和算法
这道题目要求统计给定的整数数组 arr \textit{arr} arr 中的好三元组的数量。一个好三元组对应一个下标的三元组 ( i , j , k ) (i,j,k) (i,j,k),三个下标满足题目给定的条件。遍历数组中的每一个三元组,统计好三元组的数量即可。
代码
class Solution {
public int countGoodTriplets(int[] arr, int a, int b, int c) {
int triplets = 0;
int length = arr.length;
for (int i = 0; i < length; i++) {
int num1 = arr[i];
for (int j = i + 1; j < length; j++) {
int num2 = arr[j];
if (Math.abs(num1 - num2) <= a) {
for (int k = j + 1; k < length; k++) {
int num3 = arr[k];
if (Math.abs(num2 - num3) <= b && Math.abs(num1 - num3) <= c) {
triplets++;
}
}
}
}
}
return triplets;
}
}
复杂度分析
-
时间复杂度: O ( n 3 ) O(n^3) O(n3),其中 n n n 是数组 arr \textit{arr} arr 的长度。需要使用三重循环遍历数组 arr \textit{arr} arr,对于每个三元组,可以确保下标的大小关系满足好三元组的要求,需要 O ( 1 ) O(1) O(1) 的时间判断三个元素的值是否满足好三元组的要求。
-
空间复杂度: O ( 1 ) O(1) O(1)。