Python 动态规划:求解整数序列中最长摆动子序列长度
可以使用动态规划来解决这个问题。定义两个数组 `up` 和 `down`,其中 `up[i]` 表示以第 `i` 个元素结尾且最后一个差值为正的最长摆动子序列的长度,`down[i]` 表示以第 `i` 个元素结尾且最后一个差值为负的最长摆动子序列的长度。 以下是使用Python实现的代码: ```python def wiggleMaxLength(nums): n = len(nums) if n < 2: return n # 初始化 up 和 down 数组 up = [1] * n down = [1] * n for i in range(1, n): if nums[i] > nums[i - 1]: # 如果当前元素大于前一个元素 # 则以当前元素结尾且最后一个差值为正的最长摆动子序列长度 # 等于以之前元素结尾且最后一个差值为负的最长摆动子序列长度加 1 up[i] = down[i - 1] + 1 # 以当前元素结尾且最后一个差值为负的最长摆动子序列长度不变 down[i] = down[i - 1] elif nums[i] < nums[i - 1]: # 如果当前元素小于前一个元素 # 则以当前元素结尾且最后一个差值为负的最长摆动子序列长度 # 等于以之前元素结尾且最后一个差值为正的最长摆动子序列长度加 1 down[i] = up[i - 1] + 1 # 以当前元素结尾且最后一个差值为正的最长摆动子序列长度不变 up[i] = up[i - 1] else: # 如果当前元素等于前一个元素 # 则以当前元素结尾且最后一个差值为正和负的最长摆动子序列长度都不变 up[i] = up[i - 1] down[i] = down[i - 1] # 最终结果为 up 和 down 数组最后一个元素中的最大值 return max(up[n - 1], down[n - 1]) # 测试示例 nums = [1, 7, 4, 9, 2, 5] print(wiggleMaxLength(nums)) ``` 代码解释: 1. 首先处理数组长度小于2的情况,直接返回数组长度。 2. 初始化 `up` 和 `down` 数组,长度都为 `n`,且初始值都为1。 3. 遍历数组,从第二个元素开始: - 如果当前元素大于前一个元素,更新 `up[i]` 为 `down[i - 1] + 1`,`down[i]` 不变。 - 如果当前元素小于前一个元素,更新 `down[i]` 为 `up[i - 1] + 1`,`up[i]` 不变。 - 如果当前元素等于前一个元素,`up[i]` 和 `down[i]` 都不变。 4. 最后返回 `up` 和 `down` 数组最后一个元素中的最大值。 额外需要注意的逻辑点: 1. 初始化 `up` 和 `down` 数组时,初始值都应为1,因为单个元素也视作摆动序列。 2. 在更新 `up` 和 `down` 数组时,要根据当前元素和前一个元素的大小关系正确更新。 3. 最终结果是 `up` 和 `down` 数组最后一个元素中的最大值,而不是两者之和。 ######[AI写代码神器 | 815点数解答 | 2025-07-19 17:35:00]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)64
- 判断超级幸运数:满足“纯4/7数位”或“4/7总个数为4或7”的整数计数(阿里通义 | 965点数解答 | 2026-03-13 12:15:06)36
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)478
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)432
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)426
- C 语言:按特定顺序读入并输出浮点数、整数和字符(字节豆包 | 106点数解答 | 2024-09-26 00:32:40)329
- C语言:按序读入浮点数、整数、字符并按新顺序输出,附代码实现 (字节豆包 | 108点数解答 | 2024-09-30 22:54:08)342
- C语言:按特定顺序读入并输出浮点数、整数和字符,精确控制小数位(字节豆包 | 155点数解答 | 2024-10-08 22:06:18)336
- C++与Python:按特定顺序输入输出数据并保留浮点数两位小数的实现(字节豆包 | 168点数解答 | 2024-10-08 22:07:03)342
- C语言:按特定顺序读入再输出,含浮点数精确格式处理(字节豆包 | 105点数解答 | 2024-10-08 22:07:29)351
- C++ 混合类型数据格式化输入输出:按指定顺序输出并保留两位小数(字节豆包 | 187点数解答 | 2024-10-16 14:31:08)397
- C语言:实现混合类型数据格式化输入输出,代码超简单!(字节豆包 | 159点数解答 | 2024-10-16 14:32:18)389