LeetCodeDiary

A Diary for solving LeetCode problems

View on GitHub
'''
Description: 
Autor: Au3C2
Date: 2020-12-01 17:16:46
LastEditors: Au3C2
LastEditTime: 2020-12-01 17:30:12
'''
class Solution:
    def maxTurbulenceSize(self, arr: List[int]) -> int:
        n = len(arr)
        if n == 0:
            return 0
        if len(set(arr)) == 1:
            return 1
        if n == 2:
            return 2

        change = []
        for i in range(n-2):
            if arr[i] < arr[i+1] and arr[i+1] > arr[i+2] or \
                arr[i] > arr[i+1] and arr[i+1] < arr[i+2]:
                change.append(-1)
            elif arr[i] == arr[i+1] or arr[i+1] == arr[i+2]:
                change.append(0)
            else:
                change.append(1)

        i = 0
        max_len = 0
        while i < n-2 :
            if change[i] == -1:
                j = i + 1
                for j in range(i+1,n-2):
                    if change[j] != -1:
                        j -= 1
                        break
                if j - i + 1 > max_len:
                    max_len = j - i + 1
                i = j
            i += 1
        return max_len + 2

# 真是坑爹,特殊情况一大堆,提交错误有8次,有以下几种情况
# 元素全部相同, 输出1
# 数组长度为1时,输出1
# 数组长度为2且二者不等时, 输出2 
# 上面几种情况可以总结为:列表里只有一种元素。这种写法相较分开写if的方法,时间会少几十毫秒,但是内存多了3M