博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】最长上升子序列
阅读量:4094 次
发布时间:2019-05-25

本文共 954 字,大约阅读时间需要 3 分钟。

一、题目

力扣原题:

二、动态规划

class Solution {    public int lengthOfLIS(int[] nums) {        if (null == nums || 0 == nums.length) {            return 0;        }        int[] dp = new int[nums.length];        for (int i = 0; i < nums.length; i++) {            dp[i] = 1;        }        // 场景一:dp[i] = max(dp[j] + 1),其中j < i && nums[j] < nums[i]        // 场景二:不满足场景一,则dp[i] = 1        int maxLen = 1;        for (int i = 1; i < nums.length; i++) {            for (int j = i - 1; j >= 0; j--) {                // 不符合上升条件                if (nums[j] >= nums[i]) {                    continue;                }                if (dp[j] + 1 > dp[i]) {                    dp[i] = dp[j] + 1;                    maxLen = Math.max(maxLen, dp[i]);                }            }        }        return maxLen;    }}
  • 基本思路:分析题意,最长上升子序列可以复用到当前位置之前的子结果,因此自然可以想到动态规划,dp[i]记录i位置(含nums[i])的最长上升子序列。状态转移方程为dp[i] = max(dp[j] + 1),其中0<=j<i && nums[j] < nums[i]。
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

转载地址:http://unaii.baihongyu.com/

你可能感兴趣的文章
基于云信的react-native聊天系统
查看>>
网易云音乐移动客户端Vue.js
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
Vue2.0全家桶仿腾讯课堂(移动端)
查看>>
React+Redux系列教程
查看>>
19 个 JavaScript 常用的简写技术
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>
iOS开发 支付之银联支付集成
查看>>
iOS开发支付集成之微信支付
查看>>
浅谈JavaScript--声明提升
查看>>
React非嵌套组件通信
查看>>
Websocket 使用指南
查看>>
浏览器兼容性问题解决方案 · 总结
查看>>
一个很棒的Flutter学习资源列表
查看>>
为什么你应该放弃React老的Context API用新的Context API
查看>>
Koa2初体验
查看>>