• 978. 最长湍流子数组


    当 A 的子数组 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]

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

    返回 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

  • 相关阅读:
    毕设进度21
    毕设进度20
    Javascript高级程序设计第三版-笔记
    前端踩过的坑
    thinkphp笔记
    PHP 发邮件《转》
    smarty笔记
    jquery笔记
    JS笔记
    php万年历
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14387627.html
Copyright © 2020-2023  润新知