JavaScript|LeetCode|动态规划/贪心思想|376. 摆动序列

法1:动态规划
想法1:

  1. 数组dp保存以nums[i]结尾的摆动序列的最长子序列长度
  2. 数组larger保存以nums[i]结尾的摆动序列的最长子序列中:nums[i]比前一个数小/大:false表示小,true表示大(用于判断当前数能否衔接到nums[i]之后)
/** 
* @param {number[]} nums 
* @return {number} 
*/
var wiggleMaxLength = function(nums) {
       
    if(nums.length <= 1) {
    // 少于两个元素的序列也是摆动序列        
        return nums.length;    
    }
    
    // dp保存以nums[i]结尾的摆动序列的最长子序列长度;    
    // larger保存以nums[i]结尾的摆动序列的最长子序列中:    
    // nums[i]比前一个数小/大:false表示小,true表示大    
    var dp = [], larger = [];    
    var i = 0, j = 0;    
    for(i = 0; i < nums.length; i++) {
           
        dp[i] = 1;        
        larger[i] = false;    
    }
    
    for(i = 1; i < nums.length; i++) {
           
        for(j = 0; j < i; j++) {
               
            if(nums[i] > nums[j]) {
    // 如果当前数比较大                
                if(j == 0) {
    // 只要与第一个数不相同,这个数都能与第一个数组成摆动序列                    
                    dp[i] = dp[j] + 1;                    
                    larger[i] = true; // 当前数比

你可能感兴趣的:(LeetCode,算法,leetcode,javascript)