Problem
Given an array of integers arr
, and three integers a
, b
and c
. You need to find the number of good triplets.
A triplet (arr[i], arr[j], arr[k])
is good if the following conditions are true:
0 <= i < j < k < arr.length
|arr[i] - arr[j]| <= a
|arr[j] - arr[k]| <= b
|arr[i] - arr[k]| <= c
Where |x|
denotes the absolute value of x
.
Return the number of good triplets.
Examples
Example 1:
|
|
Example 2:
|
|
Constraints:
3 <= arr.length <= 100
0 <= arr[i] <= 1000
0 <= a, b, c <= 1000
Solution
Method 1 - Naive approach
We use three nested loops to iterate through all possible triplets (i, j, k)
such that i < j < k
. For each triplet, we calculate the absolute differences and check if they meet the constraints |arr[i] - arr[j]| <= a
, |arr[j] - arr[k]| <= b
, and |arr[i] - arr[k]| <= c
. If the conditions hold, we increment the count of good triplets.
This approach works for relatively small arrays since it involves checking all combinations of triplets, resulting in cubic time complexity.
Code
|
|
|
|
Complexity
- ⏰ Time complexity:
O(n^3)
due to the triple nested loops for all combinations of triplets. - 🧺 Space complexity:
O(1)
as no extra space is used other than loop variables and counters.