zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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;
    }


}