原题地址:点我传送
思路是从第一个差开始,如果前面的大,那就找比当前数更大的,然后反转。前面的小同理,注意排查一些特殊情况。
C++:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int n = nums.size();
if(n<2)
{
return n;
}
int pre = nums[0];
int pos = 1;
while(pos < n && pre == nums[pos])
{
pos++;
}
if(pos == n) return 1;
bool bigger = nums[pos] < pre;
int ans = 1;
for(int i = pos ; i < nums.size() ; i++)
{
if(!bigger && nums[i] > pre) // need bigger number
{
ans++;
bigger = true;
}
else if(bigger && nums[i] < pre) // need smaller number
{
ans++;
bigger = false;
}
pre = nums[i];
}
return ans;
}
};