def wiggleMaxLength_two(nums):
'''
up[j]表示当前元素较上一个元素是升序状态,所以要找到与升序状态之前最近的逆序的状态的长度down[j-1],到i时当前序列的最长的摆动数组的长度
down[j]表示当前元素较上一个元素是逆序的长度,到i时当前序列的最长的摆动数组的长度
空间复杂度是O(n2)
'''
n = len(nums)
up = [1 for i in range(n)]
down = [1 for i in range(n)]
for j in range(1,n):
if nums[j-1] < nums[j]:
up[j] = down[j-1] + 1
down[j] = down[j-1]
elif nums[j-1] > nums[j]:
down[j] = up[j-1] +1
up[j] = up[j-1]
else:
down[j] = down[j - 1]
up[j] = up[j - 1]
print(down,up)
return max(down[-1],up[-1])
def wiggleMaxLength(nums):
'''
空间复杂度O(1)
'''
if len(nums) < 2:
return len(nums)
state = 'begin'
max_length = 1
for i in range(1, len(nums)):
if nums[i] > nums[i - 1] and state != 'up':
max_length += 1
state = 'up'
elif nums[i] < nums[i - 1] and state != 'down':
max_length += 1
state = 'down'
return max_length