Given an array of integers
A triplet
0 <= i < j < k < arr.length |arr[i] - arr[j]| <= a |arr[j] - arr[k]| <= b |arr[i] - arr[k]| <= c
Where
Return the number of good triplets.
Example 1:
Input: arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3 Output: 4 Explanation: There are 4 good triplets: [(3,0,1), (3,0,1), (3,1,1), (0,1,1)].
Example 2:
Input: arr = [1,1,2,2,3], a = 0, b = 0, c = 1 Output: 0 Explanation: No triplet satisfies all conditions.
Constraints:
3 <= arr.length <= 100 0 <= arr[i] <= 1000 0 <= a, b, c <= 1000
Solution
原本的想法是要用 DFS 去找出所有的組合
但寫起來又怪怪的,條件檢查有點複雜,這題又是 easy
後來發現,就真的照題意做就可以了
kotlin(參考解答)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
fun countGoodTriplets(arr: IntArray, a: Int, b: Int, c: Int): Int { | |
var ans = 0 | |
for(i in 0 until arr.lastIndex-1) { | |
for(j in i+1 until arr.lastIndex) { | |
if(Math.abs(arr[i]-arr[j]) <= a) { | |
for(k in j+1 until arr.size) { | |
if(Math.abs(arr[j]-arr[k]) <= b && Math.abs(arr[i]-arr[k]) <= c) { | |
++ans | |
} | |
} | |
} | |
} | |
} | |
return ans | |
} | |
} |
沒有留言:
張貼留言