【贪心算法】摆动序列

2.PNG

解题思路:贪心

可以把摇摆数组图形化,看成是一个上升下降的图形

如果这个上升下降的趋势中有其他的值,就忽略他们

局部最优:删除单调坡度上的点

全局最优:整个序列有最多的峰值

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;
}

1.PNG