原题地址:点我传送
思路是从第一个差开始,如果前面的大,那就找比当前数更大的,然后反转。前面的小同理,注意排查一些特殊情况。
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;
}
};
本文介绍了一种使用 C++ 来解决寻找波动序列最长长度问题的方法。通过判断序列中数值的变化趋势并相应调整,算法能有效地找出序列中符合升-降-升等交替模式的最长子序列。
263

被折叠的 条评论
为什么被折叠?



