给你一个整数数组 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 的绝对值。
返回 好三元组的数量 。
解法一
暴力破解
class Solution {
public int countGoodTriplets(int[] arr, int a, int b, int c) {
int count = 0;
for (int i = 0; i < arr.length; i++)
for (int j = i+1; j < arr.length; j++)
for (int k = j+1; k < arr.length; k++)
if (Math.abs(arr[i] - arr[j]) <= a && Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c)
count++;
return count;
}
}
解法二
暴力破解优化
class Solution {
public int countGoodTriplets(int[] arr, int a, int b, int c) {
int count = 0;
//要求i<j<k,所以i遍历次数去掉两次,j去掉一次
for (int i = 0; i < arr.length - 2; i++)
for (int j = i+1; j < arr.length - 1; j++)
//先判断arr[i]-arr[j]的绝对值是否小于等于a,不符合直接进入下个循环,跳过k的一次小循环
if (Math.abs(arr[i] - arr[j]) <= a)
for (int k = j+1; k < arr.length; k++)
if (Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c)
count++;
return count;
}
}