class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) {
return nums.size();
}
vector<int> ans;
ans.resize(nums.size());
ans[0] = 1;
ans[1] = (nums[1] == nums[0]) ? 1 : 2;
for (int i = 2; i < nums.size(); i++) {
int diff2 = nums[i] - nums[i - 1];
int diff1 = nums[i - 1] - nums[i - 2];
if ((diff1 <= 0 && diff2 > 0) || (diff1 >= 0 && diff2 < 0)) {
// 摆动
ans[i] = ans[i - 1] + 1;
}
else {
ans[i] = ans[i - 1];
}
}
return ans[ans.size() - 1];
}
};
上述代码构造ans数组时,diff1其实是不对的,nums[i]=2时,由于前一个也是下降,现在也是下降,按照题目意思这不属于摆动,所以我们不能只是查看前一个差,而应该记录前一个有变化的差,当两个变化异号时才算摆动
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() <= 1) {
return nums.size();
}
int cur = 0;
int pre = 0;
int ans = 1;
for(int i = 0; i < nums.size() - 1; i++){
cur = nums[i + 1] - nums[i];
if((pre <= 0 && cur > 0) || (pre >= 0 && cur < 0)){
// pre接收cur的值,cur不为0时,才会给pre赋值
pre = cur;
ans++;
}
}
return ans;
}
};