Leetcode376、最长摇摆子序列长度

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        // 摇摆子序列

        // 边界条件:当numsc长度小于2,nums本身就是摇摆序列
        if (nums.size() < 2)
            return nums.size();
        
        // 三种状态
        // 状态发生转换时,摇摆序列的长度增加
        // 以下四种情况,摇摆序列长度增加
        // BEGIN -> UP; BEGIN -> DOWN; UP -> DOWN; DOWN -> UP;
        const int BEGIN = 0;
        const int UP = 1;
        const int DOWN = 2;

        int STATE = BEGIN;  // 初始状态为BEGIN
        int max_length = 1;  // 摇摆序列初始长度为1

        // 从序列nums的第2个数(索引为1)开始,第一个数对应的状态为BEGIN,max_length=1
        for (int i = 1; i < nums.size(); i ++)
        {
            switch(STATE)
            {
                case BEGIN:
                    if (nums[i - 1] < nums[i])
                    {
                        // 当前值比前一个值大,状态发生改变
                        STATE = UP;
                        max_length ++;
                    }
                    else if (nums[i - 1] > nums[i])
                    {
                        // 当前值比前一个值小,状态发生改变
                        STATE = DOWN;
                        max_length ++;
                    }
                    break;
                case UP:
                    if (nums[i - 1] > nums[i])
                    {
                        // UP -> DOWN
                        STATE = DOWN;
                        max_length ++;
                    }
                    break;
                case DOWN:
                    if (nums[i - 1] < nums[i])
                    {
                        // DOWN -> UP
                        STATE = UP;
                        max_length ++;
                    }
                    break;
            }

        }
        return max_length;
    }
};

int main()
{
    int arr[] = {1, 17, 5, 10, 13, 15, 10, 5, 16, 8};
    vector<int> v;
    for (int i = 0; i < 10; i++)
    {
        v.push_back(arr[i]);
    }
    Solution S;

    int res = S.wiggleMaxLength(v);
    cout << res << endl;
    return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。