问题描述 链接到标题
解题思路 链接到标题
注意到子数组个数$cnt = len - 3 + 1 + len - 4 + 1 + … + 1$,其中len
是等差数组的长度,则cnt = (n - 1) * (n - 2) / 2
,每次遍历找出连续的等差数组的长度即可。
测试test
代码 链接到标题
class Solution {
public:
int numberOfArithmeticSlices(vector<int> &nums) {
if (nums.size() < 3)
return 0;
int dif = nums[1] - nums[0];
int len = 2;
int cnt = 0;
for (int i = 2; i < nums.size(); i++) {
if (nums[i] - nums[i - 1] == dif)
len++;
else {
if (len >= 3)
cnt += (len - 2) * (len - 1) / 2;
len = 2;
dif = nums[i] - nums[i - 1];
}
}
if (len >= 3)
cnt += (len - 2) * (len - 1) / 2;
return cnt;
}
};