LeetCode 376. 摆动序列
题目描述
思路分析
解法一:贪心(推荐)
核心思路:
- 维护
up表示以上升结尾的摆动长度,down表示以下降结尾的摆动长度。- 若
nums[i] > nums[i-1],则up = down + 1。- 若
nums[i] < nums[i-1],则down = up + 1。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length < 2) {
return nums.length;
}
int up = 1;
int down = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) {
up = down + 1;
} else if (nums[i] < nums[i - 1]) {
down = up + 1;
}
}
return Math.max(up, down);
}
}
func wiggleMaxLength(nums []int) int {
if len(nums) < 2 {
return len(nums)
}
up := 1
down := 1
for i := 1; i < len(nums); i++ {
if nums[i] > nums[i-1] {
up = down + 1
} else if nums[i] < nums[i-1] {
down = up + 1
}
}
if up > down {
return up
}
return down
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 300. 最长递增子序列 | 中等 | 贪心/DP |
| 376. 摆动序列 | 中等 | 贪心 |
| 673. 最长递增子序列的个数 | 中等 | DP |
| 1218. 最长定差子序列 | 中等 | DP |
| 1027. 最长等差数列 | 中等 | DP |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!