📅  最后修改于: 2023-12-03 15:07:34.699000             🧑  作者: Mango
这道题是针对动态规划的一道问题,需要从输入的数字序列中找到最长的摆动序列。
给定一个整数序列,找到最长的摆动序列。摆动序列是交替上升和下降。一个序列如果连续数字之间的差严格地在正数和负数之间交替,则称这样的序列为摆动序列。第一个差值可能是正数或负数。少于两个元素的序列也是摆动序列。
样例输入:
10 22 9 33 49 50 31 60 40 80
样例输出:
6
我们可以使用动态规划的方法解决此问题。我们将两个数组up和down分别用于存储截止到nums[i]时上升和下降的最长“摆动序列”的长度,则:
if nums[i] > nums[i-1]:
up[i] = down[i-1] + 1
down[i] = down[i-1]
elif nums[i] < nums[i-1]:
down[i] = up[i-1] + 1
up[i] = up[i-1]
else:
down[i] = down[i-1]
up[i] = up[i-1]
最终结果即为up和down中的最大值。
def wiggleMaxLength(nums):
if len(nums) < 2:
return len(nums)
up = [1] * len(nums)
down = [1] * len(nums)
for i in range(1, len(nums)):
if nums[i] > nums[i-1]:
up[i] = down[i-1] + 1
down[i] = down[i-1]
elif nums[i] < nums[i-1]:
down[i] = up[i-1] + 1
up[i] = up[i-1]
else:
down[i] = down[i-1]
up[i] = up[i-1]
return max(up[-1], down[-1])