动态规划 附带 视频讲解
牛牛的数列
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