Wobble sequence: greedy

/**
 * 摆动序列:贪心法
 *
 * 找出可以组成的最长的贪心序列(去掉某些元素)
 */
class Solution {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length <= 1) return nums.length;
        if (nums.length == 2) return nums[0]-nums[1]==0?1:2;

        int len = 1;
        int temp = nums[0];
        int up = 0;
        int down = 0;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] > temp) {
                if (up == 0) {
                    down = 0;
                    len++;
                }
                up++;
                temp = nums[i];
            } else if(nums[i] < temp){
                if (down == 0) {
                    up = 0;
                    len++;
                }
                down++;
                temp = nums[i];
            }
        }
        return len;
    }
}

/**
 * 摆动序列:贪心法(大神解法)
 */
class Solution1 {
    public int wiggleMaxLength(int[] nums) {
        if (nums.length < 2)
            return nums.length;
        int prevdiff = nums[1] - nums[0];
        int count = prevdiff != 0 ? 2 : 1;
        for (int i = 2; i < nums.length; i++) {
            int diff = nums[i] - nums[i - 1];
            if ((diff > 0 && prevdiff <= 0) || (diff < 0 && prevdiff >= 0)) {
                count++;
                prevdiff = diff;
            }
        }
        return count;
    }
}

Guess you like

Origin www.cnblogs.com/loveer/p/11767359.html