leetcode978

时间:2021-08-08 06:13:24
 class Solution(object):
def maxTurbulenceSize(self, A: 'List[int]') -> int:
n = len(A)
if n == 1:
return 1
elif n == 2:
if A[0]!=A[1]:
return 2
else:
return 1
else:#n >= 3
maxsize = 1
size = 1
LowHighLow = True
i = 0
while i<n:
NeedJudge = False
for j in range(i,n):
if j == n-1:
maxsize = max(maxsize,size)
return maxsize
if not NeedJudge:
if A[j] < A[j+1]:
LowHighLow = True
size += 1
NeedJudge = True
elif A[j] > A[j+1]:
LowHighLow = False
size += 1
NeedJudge = True
else:
NeedJudge = False
i += 1
break
else:
if LowHighLow:
if A[j] > A[j+1]:
LowHighLow = False
size += 1
else:
NeedJudge = False
maxsize = max(maxsize,size)
size = 1
if i==j:
i += 1
else:
i = j
break else:
if A[j] < A[j+1]:
LowHighLow = True
size += 1
else:
NeedJudge = False
maxsize = max(maxsize,size)
size = 1
if i==j:
i += 1
else:
i = j
break
return maxsize

思路:滑动窗口。

这种线性的程序,再长一倍,问题也不大。不过可读性就比较差了。

简单说一下用到的变量的作用:NeedJudge就是是否需要判断,对于每次滑动窗口的起始位置(i==j),NeedJudge都是False,这样只需要根据起始的两个位置的元素的大小,来确定是凹凸凹型还是凸凹凸型。变量LowHighLow=True表示凹凸凹型,LowHighLow=False表示凸凹凸型。这样就可以判断,当前滑动窗口后续的值是否是合法的。

如果遇到不合法,记录当前滑动窗口的大小size,并更新maxsize保留最大的滑动窗口。

也许这个版本程序比较粗糙,但是能正确执行,也是重要的成果,代码的优化,也是由粗到精,一步一步的完成的嘛。

相关文章