如果連續(xù)數(shù)字之間的差嚴(yán)格地在正數(shù)和負(fù)數(shù)之間交替,則數(shù)字序列稱為擺動(dòng)序列。第一個(gè)差(如果存在的話)可能是正數(shù)或負(fù)數(shù)。少于兩個(gè)元素的序列也是擺動(dòng)序列。
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)裕華免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
例如, [1,7,4,9,2,5] 是一個(gè)擺動(dòng)序列,因?yàn)椴钪?(6,-3,5,-7,3) 是正負(fù)交替出現(xiàn)的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是擺動(dòng)序列,第一個(gè)序列是因?yàn)樗那皟蓚€(gè)差值都是正數(shù),第二個(gè)序列是因?yàn)樗淖詈笠粋€(gè)差值為零。
給定一個(gè)整數(shù)序列,返回作為擺動(dòng)序列的最長子序列的長度。 通過從原始序列中刪除一些(也可以不刪除)元素來獲得子序列,剩下的元素保持其原始順序。
代碼實(shí)現(xiàn):
class Solution {
public:
int wiggleMaxLength(vector& nums) {
if(nums.size() < 2)
return nums.size();
const int begin = 0;
const int up = 1;
const int down = 2;
int state = begin;
int 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++;
}
if(nums[i-1] > nums[i])
{
state = down;
max_length++;
}
}
break;
case up:
if(nums[i-1] > nums[i])
{
state = down;
max_length++;
}
break;
case down:
if(nums[i-1] < nums[i])
{
state = up;
max_length++;
}
}
}
return max_length;
}
};