一流的锦州网站建设,网络营销推广招聘广告,外贸网站推广方法,微网站的建设413.等差数列划分 如果一个数列 至少有三个元素 #xff0c;并且任意两个相邻元素之差相同#xff0c;则称该数列为等差数列。
例如#xff0c;[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums #xff0c;返回数组 nums 中所有为等差数组…413.等差数列划分 如果一个数列 至少有三个元素 并且任意两个相邻元素之差相同则称该数列为等差数列。
例如[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。
给你一个整数数组 nums 返回数组 nums 中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。 本题首先需要根据等差数组的定义求出每一大部分的等差数组然后再对每一整个等差数组进行划分。首先对于求等差数组只需要在有两个的基础上看后续的差值是否和前两个一致。因此需要一直保持至少有两个起步判断是否构成等差数组。因此当第i个元素的值无法与之前的值形成等差数组时则将第i个第i-1个作为新的一个等差数组的开始并保存前一个等差数组的最大长度。之所以保存最大长度是因为题目要求求解的是所有等差数组的个数及上述中求出的等差数组中可能包含多个长度小一点的等差数组。而求法也很简单长度为n的等差数组内一共有n-1*n-2/2个。长度是n有1个长度n-1有2个长度n-2有3个。。。。。长度为3有1个加起来一共n-1*n-2/2个。
class Solution {
public:int numberOfArithmeticSlices(vectorint nums) {int nnums.size();if(n2)return 0;// cout ---;vectorintnumbers(n,0);int gapnums[1]-nums[0];numbers[0]1,numbers[1]2;//vectorintret(n,0);int k0;for(int i2;in;i){int curnums[i];if(cur-nums[i-1]gap){numbers[i]numbers[i-1]1;}else{ // ret[k]numbers[i-1];numbers[i]2;gapnums[i]-nums[i-1];}}int ret0;for(int i1;in;i){if(numbers[i]2){ int lnumbers[i-1];ret((l-2)*(l-1)/2);}}int lnumbers.back();ret((l-2)*(l-1)/2);return ret;}
};