leetcode978
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保留最大的滑动窗口。
也许这个版本程序比较粗糙,但是能正确执行,也是重要的成果,代码的优化,也是由粗到精,一步一步的完成的嘛。
leetcode978的更多相关文章
- leetcode-978. 最长湍流子数组
leetcode-978. 最长湍流子数组 Points 数组 DP 题意 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= ...
- [Swift]LeetCode978. 最长湍流子数组 | Longest Turbulent Subarray
A subarray A[i], A[i+1], ..., A[j] of A is said to be turbulent if and only if: For i <= k < j ...
- LeetCode978. 最长湍流子数组
问题:978. 最长湍流子数组 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下列条件时,我们称其为湍流子数组: 若 i <= k < j,当 k 为奇数时, A[ ...
随机推荐
- 前端小白第一次使用redux存取数据练习
在学习了redux基本教程后,课程参考如下网址:https://www.redux.org.cn/docs/introduction/CoreConcepts.html,开始着手练习 1.首先编写一个 ...
- Ubuntu 执行脚本报错:c.sh: Syntax error: "(" unexpected
在Ubuntu下执行脚本报错 c.sh: Syntax error: "(" unexpected 解决办法 sudo dpkg-reconfigure dash ubuntu@i ...
- 剑指offer 4.树 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- zabbix批量添加被监控windows客户端
由于公司大部分用的是windows服务器,大概有50多台.如果是一台一台添加的话很是麻烦,如果数量更多的话那工作量可想而知.所以网络管理员通常都是非常懒的. 环境:公司虽是域环境,但是除了几台域服务器 ...
- tensorboard OSError:[Errno 22] Invalid argument
哈哈 问题解决了.感谢大佬 Bill.Z 附上原文链接:https://blog.csdn.net/u013244846/article/details/88380860 解决方法:更改manager ...
- Azure CosmosDB (11) MongoDB概念
<Windows Azure Platform 系列文章目录> Azure Cosmos DB兼容MongoDB的API,下表将帮助我们更容易理解MongoDB中的一些概念: SQL概念 ...
- CentOS7 搭建 SVN 服务器
CentOS7 搭建 SVN 服务器 介绍SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上 ...
- Chromium(Chrome) frame structure detail
1. Chromium VS Chrome Chromium is an open-source Web browser project started by Google, to provide t ...
- 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目异同
Filecoin,Storj 以及 PPIO 这三个存储公链的设计思路是不一样的,没有优劣之分,写这篇文章也并不是为了争论各项目的好坏对错.去中心化存储是一个长期商业赛道,不同团队在同一个赛道上往不同 ...
- laravel-admin安装时执行php arisan admin:install 命令时报SQLSTATE[42000]: Syntax error or acce ss violation: 1071 Specified key was too long; max key length is 1000 bytes
问题根源 MySql支持的utf8编码最大字符长度为3字节,如果遇到4字节的宽字符就会出现插入异常.三个字节UTF-8最大能编码的Unicode字符是0xffff,即Unicode中的基本多文种平面( ...