动态规划 附带 视频讲解
牛牛的数列
http://www.nowcoder.com/questionTerminal/f2419f68541d499f920eac51c63d3f72
视频讲解:https://www.bilibili.com/video/BV1LN411R7i6/
class Solution:
def maxSubArrayLength(self , nums ):
n = len(nums)
# 以 tail[i] 结尾的 最长连续上升子序列
tail = [0] * n
# 以 head[i] 开始的 最长连续上升子序列
head = [0] * n
tail[0] = 1
# 最左向右 找出 连续的子序列
for i in range(1, n):
if nums[i] > nums[i - 1]:
tail[i] = tail[i - 1] + 1
else:
tail[i] = 1
head[n - 1] = 1
# 从右向左 找出 连续的子系列
for i in range(n - 2, -1, -1):
if nums[i + 1] > nums[i]:
head[i] = head[i + 1] + 1
else:
head[i] = 1
# 最终结果
res = 1
for i in range(1, n - 1):
# 更新 最大的结果
res = max(tail[i], head[i], res)
# 填充 需要 弥补的
if nums[i + 1] - nums[i - 1] >= 2:
res = max(res, head[i + 1] + tail[i - 1] + 1)
return res