如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
提示:
1 <= nums.length <= 5000
-1000 <= nums[i] <= 1000
class Solution {
public int numberOfArithmeticSlices(int[] nums) {
int n = nums.length;
if(n <= 2){
return 0;
}
int res = 0;
//至少为三个,所以空两个
for(int i = 0;i < n - 2;){
int j = i;
int d = nums[i+1] - nums[i];
while(j+1 < n && (nums[j+1]-nums[j]) == d){
j++;
}
int len = j - i + 1;
//长度为三的子数组的个数
int len3 = len - 2;
int curRes = ((len3 + len)*len3)>>2;
res += curRes;
i = j;
}
return res;
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.6 MB, 在所有 Java 提交中击败了5.33%的用户