Leetcode376、最長(zhǎng)搖擺子序列長(zhǎng)度

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

        // 邊界條件:當(dāng)numsc長(zhǎng)度小于2,nums本身就是搖擺序列
        if (nums.size() < 2)
            return nums.size();
        
        // 三種狀態(tài)
        // 狀態(tài)發(fā)生轉(zhuǎn)換時(shí),搖擺序列的長(zhǎng)度增加
        // 以下四種情況,搖擺序列長(zhǎng)度增加
        // BEGIN -> UP; BEGIN -> DOWN; UP -> DOWN; DOWN -> UP;
        const int BEGIN = 0;
        const int UP = 1;
        const int DOWN = 2;

        int STATE = BEGIN;  // 初始狀態(tài)為BEGIN
        int max_length = 1;  // 搖擺序列初始長(zhǎng)度為1

        // 從序列nums的第2個(gè)數(shù)(索引為1)開始,第一個(gè)數(shù)對(duì)應(yīng)的狀態(tài)為BEGIN,max_length=1
        for (int i = 1; i < nums.size(); i ++)
        {
            switch(STATE)
            {
                case BEGIN:
                    if (nums[i - 1] < nums[i])
                    {
                        // 當(dāng)前值比前一個(gè)值大,狀態(tài)發(fā)生改變
                        STATE = UP;
                        max_length ++;
                    }
                    else if (nums[i - 1] > nums[i])
                    {
                        // 當(dāng)前值比前一個(gè)值小,狀態(tài)發(fā)生改變
                        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;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容