结果分为两部分,已经排好的(说明数列在中间断了),和正在排序的,正在排序的,新加的数列个数和正在排序中数列的个数有很简单的数学关系。
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums) {
int n = static_cast<int>(nums.size());
if(n<3)
return 0;
int ret = 0;
int sorting = 0;
for(int i=2;i<n;++i)
{
if(nums[i]-nums[i-1]==nums[i-1]-nums[i-2])
{
++sorting;
ret += sorting;
}
else
{
sorting = 0;
}
}
return ret;
}
};