978. 最长湍流子数组
数组 最长
2023-09-14 09:06:53 时间
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]。
示例 1:
输入:arr = [9,4,2,10,7,8,8,1,9]
输出:5
解释:arr[1] > arr[2] < arr[3] > arr[4] < arr[5]
示例 2:
输入:arr = [4,8,12,16]
输出:2
示例 3:
输入:arr = [100]
输出:1
这题挺难的,但是我们慢慢来:
int maxTurbulenceSize(int* arr, int arrSize){
int i;
int maxo=1;
int maxe=1;
int anso=1;
for(i=1;i<arrSize;i=i+2){
if(i==arrSize-1){
if(arr[i]>arr[i-1]){
anso++;
}
}
if(i<arrSize-1)
if(arr[i]<=arr[i-1]&&arr[i]<=arr[i+1]){
if(anso>maxo){
maxo=anso;
}
anso=1;
continue;
}
if(i<arrSize-1)
if(arr[i]<=arr[i-1]&&arr[i]>arr[i+1]){
if(anso>maxo){
maxo=anso;
}
anso=2;
continue;
}
if(i<arrSize-1)
if(arr[i]>arr[i-1]&&arr[i]<=arr[i+1]){
anso=anso+1;
if(anso>maxo){
maxo=anso;
}
anso=1;
}
else{
anso=anso+2;
}
}
if(anso>maxo){
maxo=anso;
}
// printf("o %d ",maxo);
int anse=1;
for(i=1;i<arrSize;i=i+2){
// printf("%d anso %d ",arr[i],anse);
if(i==arrSize-1){
if(arr[i]<arr[i-1]){
anse++;
}
}
if(i<arrSize-1)
if(arr[i]>=arr[i-1]&&arr[i]>=arr[i+1]){
if(anse>maxe){
maxe=anse;
}
// printf("e %d ",maxe);
anse=1;
continue;
}
if(i<arrSize-1)
if(arr[i]>=arr[i-1]&&arr[i]<arr[i+1]){
if(anse>maxe){
maxe=anse;
}
// printf("e %d ",maxe);
anse=2;
continue;
}
if(i<arrSize-1)
if(arr[i]<arr[i-1]&&arr[i]>=arr[i+1]){
anse=anse+1;
if(anse>maxe){
maxe=anse;
}
// printf("e %d ",maxe);
anse=1;
}
else{
anse=anse+2;
}
}
if(anse>maxe){
maxe=anse;
}
// printf("e %d ",maxe);
if(maxe>maxo){
return maxe;
}
else{
return maxo;
}
}