You are given a 0-indexed, strictly increasing integer array nums
and a positive integer diff
. A triplet (i, j, k)
is an arithmetic triplet if the following conditions are met:
i < j < k
,nums[j] - nums[i] == diff
, andnums[k] - nums[j] == diff
.
Return the number of unique arithmetic triplets.
Example 1:
Input: nums = [0,1,4,6,7,10], diff = 3 Output: 2 Explanation: (1, 2, 4) is an arithmetic triplet because both 7 - 4 == 3 and 4 - 1 == 3. (2, 4, 5) is an arithmetic triplet because both 10 - 7 == 3 and 7 - 4 == 3.
Example 2:
Input: nums = [4,5,6,7,8,9], diff = 2 Output: 2 Explanation: (0, 2, 4) is an arithmetic triplet because both 8 - 6 == 2 and 6 - 4 == 2. (1, 3, 5) is an arithmetic triplet because both 9 - 7 == 2 and 7 - 5 == 2.
Constraints:
3 <= nums.length <= 200
0 <= nums[i] <= 200
1 <= diff <= 50
nums
is strictly increasing.
就是求长度为3,差为diff的等差数列的个数。刚开始还真没想到怎么做,想复杂了,结果看了答案以后发现用个set存就行了,遍历数组,然后看看之前有没有遇到num - diff和num - 2 * diff,就完事了……我太愚蠢了。
class Solution {
public int arithmeticTriplets(int[] nums, int diff) {
Set<Integer> set = new HashSet<>();
int result = 0;
for (int num : nums) {
if (set.contains(num - diff) && set.contains(num - 2 * diff)) {
result++;
}
set.add(num);
}
return result;
}
}