376. Wiggle Subsequence

这个傻屌题,二刷思路一下子就找到了,问题是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需要考虑。

原文地址:https://www.cnblogs.com/reboot329/p/5875876.html