只要分析出数据规律,代码比较好写
package likou;
/*
* 第413道题
* 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
* 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
* 给你一个整数数组 nums ,返回数组 nums中所有为等差数组的子数组个数。
*/
public class Demo413 {
private int[] nums;
public Demo413(int[] nums) {
this.nums = nums;
}
public int subCount() {
int count = 0;
if(nums == null || nums.length<3) {
return count;
}else {
int length = nums.length;
int[] subcount = new int[length];//用来记录符合条件的子数组的个数
for(int i=2;i<length;i++) {
if(nums[i]-nums[i-1] == nums[i-1] - nums[i-2]) {
subcount[i] = subcount[i-1]+1;
/*
* 以数组[1,2,3,4,5,6]为例
* i=2时,子数组为[1,2,3] 满足条件的子数组个数为1
* i=3时,子数组为[1,2,3,4]满足条件的子数组个数为
* subcount[2] = 1
* subcont[3] = subcont[2]+1=2
* 所以总个数为1+2=3
* i=4时,子数组为[1,2,3,4,5]时
* ubcount[2] = 1
* subcont[3] = subcont[0]+1=2
* subcont[4] = subcont[3]+1=3
* 所以总个数为1+2+3=6
* 以此类推
*/
}
}
for(int sum:subcount) {
count +=sum;
}
}
return count;
}
}