其他分享
首页 > 其他分享> > 978. 最长湍流子数组

978. 最长湍流子数组

作者:互联网

当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组

也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。

返回 A 的最大湍流子数组的长度。

 

示例 1:

输入:[9,4,2,10,7,8,8,1,9]
输出:5
解释:(A[1] > A[2] < A[3] > A[4] < A[5])

示例 2:

输入:[4,8,12,16]
输出:2

示例 3:

输入:[100]
输出:1

 

提示:

  1. 1 <= A.length <= 40000
  2. 0 <= A[i] <= 10^9

 

滑动窗口切入

TLE 88/89

class Solution:
    def maxTurbulenceSize(self, arr: List[int]) -> int:
        n=len(arr)
        if n==1:return 1
        maxLen=0
        for i in range(n):
            curLen=0
            for j in range(i,n):
                if curLen==0:
                    curLen+=1
                elif curLen==1:
                    if arr[j-1]!=arr[j]:
                        curLen+=1
                else:
                    if arr[j-1]==arr[j]:
                        break
                    if arr[j-2]>arr[j-1] and arr[j-1]<arr[j]:
                        curLen+=1
                    elif arr[j-2]<arr[j-1] and arr[j-1]>arr[j]:
                        curLen+=1
                    else:
                        break
                maxLen=max(maxLen,curLen)
        return maxLen

 

 

运用动归+降维 思想

二重循环降为一重循环

引入flag作为>,<的标记

AC~!

class Solution:
    def maxTurbulenceSize(self, arr: List[int]) -> int:
        n=len(arr)
        flag=0
        curLen=1
        maxLen=1
        for i in range(1,n):
            if arr[i-1]<arr[i]:
                if flag=='<' or flag==0:
                    curLen+=1
                    maxLen=max(maxLen,curLen)
                else:
                    curLen=2
                flag='>'
            elif arr[i-1]>arr[i]:
                if flag=='>' or flag==0:
                    curLen+=1
                    maxLen=max(maxLen,curLen)
                else:
                    curLen=2
                flag='<'
            else:
                flag=0
                curLen=1
        return maxLen

 

标签:arr,湍流,int,978,maxLen,flag,curLen,数组
来源: https://www.cnblogs.com/xxxsans/p/14387627.html