↓ 跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/
  5. 0300-0399/

0376 摆动序列

Solution

from typing import List

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 1
        f = [1] * n  # f[i]: 以i结尾,最后一步上升的最长摆动子序列长度
        g = [1] * n  # g[i]: 以i结尾,最后一步下降的最长摆动子序列长度
        for i in range(1, n):
            for j in range(i):
                if nums[j] < nums[i]:
                    f[i] = max(f[i], g[j] + 1)
                elif nums[j] > nums[i]:
                    g[i] = max(g[i], f[j] + 1)
            ans = max(ans, f[i], g[i])
        return ans

# 本地测试
if __name__ == "__main__":
    sol = Solution()
    print(sol.wiggleMaxLength([1,7,4,9,2,5])) # 6
    print(sol.wiggleMaxLength([1,17,5,10,13,15,10,5,16,8])) #7
    print(sol.wiggleMaxLength([1,2,3,4,5,6,7,8,9])) #2