• LeetCode376. 摆动序列


    class Solution {
        /**
         *  最优子结构:在i处递减的摆动序列的总长度,就是在i之前以递增结尾的最长摆动序列长度 +1;
         *    状态定义:up[i]   表示以前 i 个元素中的某一个为结尾的最长的 上升摆动序列 的长度
         *             down[i] 表示以前 i 个元素中的某一个为结尾的最长的 下降摆动序列 的长度
         */
        public int wiggleMaxLength(int[] nums) {
            /**
             *  方法1:时间复杂度:O(n)   空间复杂度:O(n)
             */
            /*
            int len = nums.length;
            // 规定少于两个元素的序列也是摆动序列
            if (len < 2) {
                return len;
            }
            int[] up = new int[len];
            int[] down = new int[len];
            up[0] = down[0] = 1;
            for (int i = 1; i < len; i++) {
                if (nums[i] > nums[i-1]) {
                    up[i] = down[i-1] + 1;
                    down[i] = down[i-1];
                }else if (nums[i] < nums[i-1]) {
                    down[i] = up[i-1] + 1;
                    up[i] = up[i-1];
                }else { // 如果相等,都不变
                    up[i] = up[i-1];
                    down[i] = down[i-1];
                }
            }
            return Math.max(up[len-1], down[len-1]);
            */
            /**
             * 方法2:空间压缩。  时间复杂度:O(n)   空间复杂度:O(1)
             */
            int len = nums.length;
            if (len < 2) {
                return len;
            }
            int up = 1, down = 1;
            for (int i = 1; i < len; i++) {
                if (nums[i] > nums[i-1]) {
                    up = down + 1;
                }else if (nums[i] < nums[i-1]) {
                    down = up + 1;
                }
            }
            return Math.max(up, down);
        }
    }
  • 相关阅读:
    C语言第二次实验报告
    C语言第一次实验报告
    java远程开关机
    html5 总结
    css media 媒体查询
    移动端适配rem
    判断Android系统和iPhone系统 QQ游览器 微信
    原生javascript 选项卡封装
    浅谈坐标系以及之间的转换
    百度地图开发的学习(二)——地图定位
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14217180.html
Copyright © 2020-2023  润新知