1、对于三个数的等差数组,计数+1;对于多个数的等差数组,拆分,公式为(c-2)*(c-1)/2 。用一个sum累加即可,count随用虽丢。注意边界条件及状态转移。
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& A) {
int n = A.size();
int difference = INT_MAX;
int i = 1;
int count = 0;
int sum = 0;
while(i < n){
if(A[i] - A[i-1] == difference){
count++;
i++;
} else {
difference = A[i] - A[i-1];
if(count > 2)
sum += ((count - 2) * (count - 1)) / 2;
count = 2;
i++;
}
}
if(count > 2)
sum += ((count - 2) * (count - 1)) / 2;
return sum;
}
};
本文介绍了一种高效算法,用于计算数组中所有等差数列切片的数量。算法通过一次遍历实现,利用状态转移思想,对三个或更多元素组成的等差数列进行计数,同时处理边界条件。

382

被折叠的 条评论
为什么被折叠?



