
解题思路:贪心
可以把摇摆数组图形化,看成是一个上升下降的图形
如果这个上升下降的趋势中有其他的值,就忽略他们
局部最优:删除单调坡度上的点
全局最优:整个序列有最多的峰值
1.若数组中元素少于等于,返回numsSize
2.用两个变量preDiff和curDiff记录当前两个数的差值和之前两个数值的差值
3.若preDiff和curDiff的符号不一样,则result+1,将preDiff的值变为curDiff
int wiggleMaxLength(int* nums, int numsSize){
if(numsSize <= 1)
return numsSize;
int result = 1;
int preDiff = 0;
int curDiff = 0;
int i;
for(i = 1; i < numsSize; ++i) {
curDiff = nums[i] - nums[i - 1];
if((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
result++;
//防止在两个连续相等的元素之后,之后的变化规律和相等元素之前的变化规律一样
preDiff = curDiff;
}
}
return result;
}
