问题描述:
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
例如,[1,3,5,7,9]
、[7,7,7,7]
和 [3,-1,-5,-9]
都是等差数列。
给你一个整数数组 nums
,返回数组 nums
中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
示例 1:
输入:nums = [1,2,3,4] 输出:3 解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。
示例 2:
输入:nums = [1] 输出:0
解决方案:
1、确定判定条件:等差数列性质:a1+a2=2*a2
2、明确返回输出结果:子等差数列数量
3、统计数量:等差数列(3个数及以上)子数列存在多种情况,故需逐步统计 ans 值
函数代码:
class Solution { public:int numberOfArithmeticSlices(vector<int>& nums) {int n=nums.size();if(n<=2) return 0;vector<int>ans(n,0);for(int i=2;i<n;i++){if(nums[i]+nums[i-2]==nums[i-1]*2)ans[i]=ans[i-1]+1;}return accumulate(ans.begin(),ans.end(),0);} };