这个傻屌题,二刷思路一下子就找到了,问题是edge case多的一逼,其实难就难在如何处理相等的2个元素。比如记录相等前的正负判断,这个还好说。
一上来就相等怎么办,必须解决这种情况,反正和麻烦。。
public class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1) return nums.length;
boolean pos = (nums[1] - nums[0] > 0);
boolean begin = true;
//3 3 3 2 5
int max = 1;
for(int i = 1; i < nums.length;i++)
{
if(begin)
{
if(nums[i]==nums[i-1]) continue;
else
{
pos = (nums[i] - nums[i-1]>0);
begin = false;
max++;
continue;
}
}
if(nums[i] == nums[i-1]) continue;
if(pos && nums[i-1] > nums[i])
{
max++;
pos=!pos;
}
else if(!pos && nums[i-1] < nums[i])
{
max++;
pos=!pos;
}
else continue;
}
return max;
}
}
怎么看都觉得一刷的方法是错的,然后测试了一下,果然他妈错了。一刷没有考虑我说的那种,一上来就是相等这种情况。答案有5种方法,除去垃圾法,我想到的似乎是第五种,GREEDY。
动态规划似乎没有那么多edge case需要考虑。