Leetcode 376. 摆动序列

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size() < 2)
            return nums.size();
        static const int BEGIN = 0;
        static const int UP = 1;
        static const int DOWN = 2;
        int STATE = BEGIN;
        int max_len =  1;// 摇摆序列至少为1,可能是两个up,可能是两个down,还可能是up down 或者是 down up.
        for(int i=1; i<nums.size(); ++i)
        {
            switch(STATE)
            {
                case BEGIN:
                    if(nums[i] > nums[i-1])
                    {
                        STATE = UP;
                        ++max_len;
                    }
                    else if(nums[i] < nums[i-1])
                    {
                        STATE = DOWN;
                        ++max_len;
                    } 
                    break;
                case UP:
                    if(nums[i] < nums[i-1])
                    {
                        STATE = DOWN;
                        ++max_len;
                    }
                    break;
                case DOWN:
                    if(nums[i-1] < nums[i])
                    {
                        STATE = UP;
                        ++max_len;
                    }
                    break;
            }
        }
        return max_len;
        
    }
};

猜你喜欢

转载自www.cnblogs.com/randyniu/p/9333911.html