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 的最大湍流子数组的长度。
解题思路:动态规划,如果当前的数可以和前面两个数构成大小关系的翻转,那么最大湍流子数组的长度就可以在前一个加一,还需要考虑的是即时没有和前两个构成翻转关系,只要和前一个不等,那么包含当前数值的最大湍流子数组的长度就是2,因此初始化的是1,考虑到有相等的字符,所以初始化一,代码如下:

class Solution:
    def maxTurbulenceSize(self, arr: List[int]) -> int:
        size = len(arr)
        dp = [1] * size
        for i in range(1, size):
            if i == 1:
                dp[i] = 2 if arr[i] != arr[i-1] else 1
            elif (arr[i-2] < arr[i-1] and arr[i-1] > arr[i]) or (arr[i-2] > arr[i-1] and arr[i-1] < arr[i]):
                dp[i] = dp[i-1] + 1
            elif arr[i] != arr[i-1]:
                dp[i] = 2
        return max(dp)

你可能感兴趣的:(数据结构与算法,动态规划,数据结构,leetcode,动态规划,python,数组)