注意两个点:
1.正负数的判断用乘法,小于0就说明两个数异号
2.两个数相等,wiggle Subsequence的长度减1
3.读题没读清楚,[1,17,5,10,13,15,10,5,16,8]-->[1,17,10,13,10,16,8],其中5,15,5可以删掉,之前一直以为必须是连续的才行,所以我把这个数组分成了三个wiggle Subsequence,然后挑了一个最大的
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int len = nums.size();
if(len <= 1){
return len;
}
vector<int> wiggle(len-1,0);
int wiggle_len = len ;
int j = 0;
for(int i = 1; i < len; i++){
int num = nums[i] - nums[i - 1];
if(num != 0){
wiggle[j] = num;
j++;
}
if(num == 0){
wiggle_len--;
}
}
for(int k = 0; k < j-1 ; k++){
if(wiggle[k] * wiggle[k+1] > 0 ){
wiggle_len--;
}
}
return wiggle_len;
}
};