- 读懂题就花了不少时间,心想,出题人良心不痛吗?
- 这道题的关键是找到贬值点
- 找到峰值点的关键就是找出任一一点的左差值与右差值是不是一正一负的关系
- 在考虑最左右侧的点时,要把左结点考虑成左其左侧还是一个与其相同值的结点,从而得到左差值为0的效果
- 而最右结点默认就是峰值点
#include <iostream>
#include <vector>
class Solution {
public:
int wiggleMaxLength(std::vector<int>& nums) {
if (nums.size() == 1)
return 1;
int left_diff = 0, right_diff = 0, count = 1;
for (int i = 0; i < nums.size() - 1; ++i) {
right_diff = nums.at(i + 1) - nums.at(i);
if ((left_diff >= 0 && right_diff < 0) || (left_diff <= 0 && right_diff > 0)) {
++count;
left_diff = right_diff;
}
}
return count;
}
};
int main()
{
std::vector<int> nums {1, 7, 4, 9, 2, 5};
Solution s;
std::cout << s.wiggleMaxLength(nums) << std::endl;
return 0;
}