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ù)。