```cpp #include <iostream> #include <vector> using namespace std; int wiggleMaxLength(vector<int>& nums) { int n = nums.size(); if (n < 2) return n; int up = 1, down = 1; for (int i = 1; i < n; ++i) { if (nums[i] > nums[i-1]) { up = down + 1; } else if (nums[i] < nums[i-1]) { down = up + 1; } } return max(up, down); } int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } cout << wiggleMaxLength(nums) << endl; return 0; } ``` 代码解释: 1. 使用动态规划思想,维护两个状态变量`up`和`down`,分别表示以当前元素结尾时最后一步是上升或下降的最长摆动序列长度。 2. 遍历数组时,当当前元素大于前一个元素时,更新`up`为`down + 1`;当当前元素小于前一个元素时,更新`down`为`up + 1`。 3. 最终结果为`up`和`down`中的较大值。 三条额外需要注意的逻辑点: - 当输入数组长度小于2时直接返回数组长度,因为单元素或空数组本身就是摆动序列。 - 相等的相邻元素不会影响`up`和`down`的值,因此会被自动跳过。 - 该算法时间复杂度为O(n),空间复杂度为O(1),是最优解法。 [2025-07-19 17:37:51 | AI写代码神器 | 373点数解答]