题目:
给你一个下标从 0 开始、严格递增 的整数数组 nums
和一个正整数 diff
。如果满足下述全部条件,则三元组 (i, j, k)
就是一个 算术三元组 :
i < j < k
,nums[j] - nums[i] == diff
且nums[k] - nums[j] == diff
返回不同 算术三元组 的数目。
示例 1:
输入:nums = [0,1,4,6,7,10], diff = 3 输出:2 解释: (1, 2, 4) 是算术三元组:7 - 4 == 3 且 4 - 1 == 3 。 (2, 4, 5) 是算术三元组:10 - 7 == 3 且 7 - 4 == 3 。
示例 2:
输入:nums = [4,5,6,7,8,9], diff = 2 输出:2 解释: (0, 2, 4) 是算术三元组:8 - 6 == 2 且 6 - 4 == 2 。 (1, 3, 5) 是算术三元组:9 - 7 == 2 且 7 - 5 == 2 。
解题思路: 最外层遍历负责每次将后面的数组减去当前数组元素的值,来看是否等于diff,如果等于则从当前数组元素开始,减去当前数组元素,看是否等于diff,如果相等,则三元组数量+1,反之找不到则重新回到最外层遍历。
Java代码如下:
class Solution {
public int arithmeticTriplets(int[] nums, int diff) {
int count = 0; //三元组数量
for(int s = 0;s < nums.length;s++){
for(int i = s+1;i < nums.length;i++){
if(nums[i]-nums[s] == diff){
for(int k = i+1;k < nums.length;k++){
if(nums[k] - nums[i] == diff){
count += 1;
}
}
}
}
}
return count;
}
}
运行结果:
时间复杂度为O(N^3),等待后续优化。