【力扣】摆动序列(贪心)
题目描述

按理说思路是很简单的,用两个指针向前遍历,符合摆动序列的话就记录长度,不符合的话就让快指针向前移动一格跳过。

但是在写的时候会出很多奇奇怪怪的错,总会卡在某些特殊的样例上,细节控制不好。

比如出现这种情况。
感觉贪心只是很模糊的一种思路,很难用一个统一的模版处理,不同问题之间的细节差别太大了。
代码如下:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
int curDiff = 0; // 当前一对差值
int preDiff = 0; // 前一对差值
int result = 1; // 记录峰值个数,序列默认序列最右边有一个峰值
for (int i = 0; i < nums.size() - 1; i++) {
curDiff = nums[i + 1] - nums[i];
// 出现峰值
if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
result++;
preDiff = curDiff; // 注意这里,只在摆动变化的时候更新prediff
}
}
return result;
}
};
好像我一开始时把它想的太复杂了。
感觉最好从一开始就想好整体思路突然再写代码,只在局部小修小补的话反而最容易越搞越复杂,最后除了多出一堆if语句之外什么问题也没解决。。

浙公网安备 33010602011771号