思路没想到就很难,,,,,,看了题解就觉得,还可以
加个图吧,贪心这玩意。。
我之前的困惑就在于:
不知道如何判断 正负规律,发现我双指针的思想用错了。
我一开始想用两个指针指向 数组的元素
这里的两个指针指向的是差值。
注意:
判断的条件 为什么 pre 可以 == 0 ?
考虑到会有平坡,之后 diff 又会改变的情况
pre 只在有变动的时候才改变
为什么呢?
如果跟着 diff 移动,那么 “ 2 ”,就会被记录下来,但 2 不是我们想要的值。
我的和题解不太一样。因为我觉得题解不太好理解
我的方法:
1. 判断 数组大小为 1 的时候
2. 判断 数组大小为 2 的时候
3. 循环判断 数组大小 > 2 的时候
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
// 先特判 size == 1
int i = 0;
int count;
if(nums.size() == 1)
return 1;
// size == 2
int pre = nums[1] - nums[0];
if(pre == 0)
count = 1;
else
count = 2;
for(int i = 2; i <nums.size(); i++)
{
int diff = nums[i] - nums[i - 1];
if((diff > 0 && pre <= 0) || (diff < 0 && pre >= 0))
{
count++;
pre = diff; // 只在有变动的时候改变
}
}
return count;
}
};