题意:
给你一个整数数组 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
解题思路:
由于数据范围给的小,所以直接暴力模拟
class Solution {
/**
* @param Integer[] $arr
* @param Integer $a
* @param Integer $b
* @param Integer $c
* @return Integer
*/
function countGoodTriplets($arr, $a, $b, $c) {
$n = count($arr);
$ans = 0;
for($i = 0; $i < $n-2; $i++) {
for($j = $i+1; $j < $n-1; $j++) {
for($k = $j+1; $k < $n; $k++) {
if(abs($arr[$i]-$arr[$j]) <= $a && abs($arr[$j]-$arr[$k]) <= $b && abs($arr[$i]-$arr[$k]) <= $c) {
$ans++;
}
}
}
}
return $ans;
}
}
进行剪枝,不满足第一个条件不再进行内层循环
class Solution {
/**
* @param Integer[] $arr
* @param Integer $a
* @param Integer $b
* @param Integer $c
* @return Integer
*/
function countGoodTriplets($arr, $a, $b, $c) {
$n = count($arr);
$ans = 0;
for($i = 0; $i < $n-2; $i++) {
for($j = $i+1; $j < $n-1; $j++) {
if(abs($arr[$i]-$arr[$j]) <= $a) {
for($k = $j+1; $k < $n; $k++) {
if(abs($arr[$j]-$arr[$k]) <= $b && abs($arr[$i]-$arr[$k]) <= $c) {
$ans++;
}
}
}
}
}
return $ans;
}
}
2008



被折叠的 条评论
为什么被折叠?



