题解 | #71.最长上升子序列(一)#

最长上升子序列(一)

http://www.nowcoder.com/practice/5164f38b67f846fb8699e9352695cd2f

状态转移方程

dp[i]=Math.max(dp[i],dp[j]+1)dp[i] = Math.max(dp[i],dp[j]+1) 条件:j<iarr[j]<arr[i]j<i且arr[j]<arr[i]

function LIS( arr ) {
  if(arr.length == 0)
    return 0;
  
  let dp = new Array(arr.length);
  dp[0] = 1;
/* 
*遍历数组中所有的数,再遍历当前数之前的所有数,
*只要前面某个数小于当前数,则要么长度在之前基础上加1,要么保持不变,取两者中的较大者。
*即dp[i]=Math.max(dp[i],dp[j]+1)dp[i]=Math.max(dp[i],dp[j]+1)dp[i]=Math.max(dp[i],dp[j]+1)
*/ 
  for(let i=1; i<arr.length; i++){
    dp[i] = 1;
    for(let j=0; j<i; j++){
      if(arr[i] > arr[j])
        dp[i] = Math.max(dp[i],dp[j]+1);
    }
  }
  
  return Math.max(...dp);
}
全部评论

相关推荐

12-19 22:04
武汉大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务