给你一个整数数组nums,要求该数组中所有为等差数组的子数组个数(等差数组子数组,指的是至少3个数的连续数组成等差数列)输入格式:一个整数数组 输出格式:一个非负整数,表示等差子数组的个数 用java实现这道算法题
时间: 2023-05-26 18:05:52 浏览: 90
思路:遍历数组,以每个位置的数为等差数列的中间数,向两边扩展,查看是否存在等差数列。
具体做法:
1.初始化结果res为0;
2.遍历数组,以每个位置的数为等差数列的中间数,向两边扩展;
3.扩展时,记录前一个数、当前数和差值,并判断是否构成等差数列,若是则res加1,当前位置向右移动一位继续扩展;
4.当无法构成等差数列时,当前位置向右移动一位继续扩展;
5.重复2~4,直到遍历完整个数组。
Java代码实现:
```java
public class Solution {
public int arithmeticSlices(int[] nums) {
int n = nums.length;
if(n < 3) return 0;
int res = 0;
for(int i = 1; i < n - 1; i++) {
int pre = i - 1;
int cur = i;
int diff = nums[cur] - nums[pre];
while(cur + 1 < n && nums[cur + 1] - nums[cur] == diff) {
res++;
cur++;
}
cur = i;
while(pre >= 0 && cur + 1 < n && nums[cur + 1] - nums[cur] == nums[cur] - nums[pre]) {
res++;
pre--;
cur++;
}
}
return res;
}
}
```
阅读全文