413. 等差数列划分
如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。
[1,3,5,7,9]
、[7,7,7,7]
和 [3,-1,-5,-9]
都是等差数列。给你一个整数数组 nums
,返回数组 nums
中所有为等差数组的 子数组 个数。
子数组 是数组中的一个连续序列。
class Solution {
public:
int numberOfArithmeticSlices(vector& nums) {
int n=nums.size();
vectordp(n,0);
int ret=0;
for(int i=2;i
978. 最长湍流子数组
给定一个整数数组 arr
,返回 arr
的 最大湍流子数组的长度 。
如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。
更正式地来说,当 arr
的子数组 A[i], A[i+1], ..., A[j]
满足仅满足下列条件时,我们称其为湍流子数组:
i <= k < j
:
k
为奇数时, A[k] > A[k+1]
,且k
为偶数时,A[k] < A[k+1]
;i <= k < j
:
k
为偶数时,A[k] > A[k+1]
,且k
为奇数时, A[k] < A[k+1]
。class Solution {
public:
int maxTurbulenceSize(vector& arr) {
int n = arr.size();
vector f(n, 1), g(n, 1);
int ret = 1;
for(int i = 1; i < n; i++)
{
if(arr[i - 1] < arr[i]) f[i] = g[i - 1] + 1;
else if(arr[i - 1] > arr[i]) g[i] = f[i - 1] + 1;
ret = max(ret, max(f[i], g[i]));
}
return ret;
}
};