Leetcode——300. 最长上升子序列
题目描述:题目链接
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入:[10,9,2,5,3,7,101,18]输出: 4
解释: 最长的上升子序列是[2,3,7,101],它的长度是4。
说明:
- 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
 - 你算法的时间复杂度应该为 O(n2) 。
 
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
这个题目和最长公共子序列一样,都是可以利用动态规划来解决问题的:
可以利用常见的动态规划思路:
1:将问题归纳。可以定义 dp[ i ] 来表示前 i 个字符中的最长的公共子序列。
2:给出动态规划的递推思路。dp[ i ] = max { dp[ j ] + 1} (0 <= j < i ,nums[j] < nums[i] )
3:初始化。这一步最重要,因为一个数字的时候最长上升子序列为1,所以我们需要将初始化数组为1
其实只要我们细心的推理,可以很容易的得到递推关系式。
下面给出具体的代码描述:
class Solution {
    public int lengthOfLIS(int[] nums) {
        //如果数组为空,或者数组长度为0,则直接返回0
        if(nums == null || nums.length == 0){
            return 0;
        }
        int len = nums.length;
        int[] a = new int[len];
        Arrays.fill(a,1);
        //利用两层for循环来处理
        for(int i = 1; i < len; i++){
            for(int j = 0; j < i; j++){
                if(nums[j] < nums[i]){
                    a[i] = Math.max(a[i],a[j]+1);
                }
            }
        }
        int max = 1;
        for(int i = 0; i < len; i++){
            if(a[i] > max){
                max = a[i];
            }
        }
        return max;
    }
}
Leetcode——300. 最长上升子序列的更多相关文章
- Java实现 LeetCode 300  最长上升子序列
		
300. 最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,10 ...
 - leetcode 300最长上升子序列
		
用递归DFS遍历所有组合肯定积分会超时,原因是有很多重复的操作,可以想象每次回溯后肯定会有重复操作.所以改用动态规划.建立一个vector<int>memo,初始化为1,memo[i]表示 ...
 - Leetcode 300.最长上升子序列
		
最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的 ...
 - [LeetCode] 300. 最长上升子序列 ☆☆☆(动态规划 二分)
		
https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/dong-tai-gui-hua-she-ji-fan ...
 - LeetCode 300. 最长上升子序列(Longest Increasing Subsequence)
		
题目描述 给出一个无序的整形数组,找到最长上升子序列的长度. 例如, 给出 [10, 9, 2, 5, 3, 7, 101, 18], 最长的上升子序列是 [2, 3, 7, 101],因此它的长度是 ...
 - LeetCode 300——最长上升子序列
		
1. 题目 2. 解答 2.1. 动态规划 我们定义状态 state[i] 表示以 nums[i] 为结尾元素的最长上升子序列的长度,那么状态转移方程为: \[state[i] = max(state ...
 - 1. 线性DP  300. 最长上升子序列 (LIS)
		
最经典单串: 300. 最长上升子序列 (LIS) https://leetcode-cn.com/problems/longest-increasing-subsequence/submission ...
 - Leetcode题目300.最长上升子序列(动态规划-中等)
		
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...
 - 【LeetCode】300.最长递增子序列——暴力递归(O(n^3)),动态规划(O(n^2)),动态规划+二分法(O(nlogn))
		
算法新手,刷力扣遇到这题,搞了半天终于搞懂了,来这记录一下,欢迎大家交流指点. 题目描述: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删 ...
 
随机推荐
- redis主从|哨兵|集群模式
			
关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...
 - HDU1160(KB12-J DP)
			
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
 - js-权威指南学习笔记20
			
第二十章 客户端存储 1.客户端存储有一下几种形式:Web存储.cookie.IE userData.离线Web应用.Web数据库.文件系统API. 2.Web存储标准所描述的API包含localSt ...
 - AngularJS学习之 angular-file-upload控件使用方法
			
1.官方链接 https://github.com/nervgh/angular-file-upload 2.安装到项目中 bower install angular-file-upload(安装完成 ...
 - InfoQ观察:Java EE的未来
			
原创 2017-03-06 Charles Humble 聊聊架构 作者|Charles Humble编辑|薛命灯 作为InfoQ下一年编辑关注点审核工作的一部分,我们挑选了Java作为深入探讨的主题 ...
 - JS 解决 IOS 中拍照图片预览旋转 90度 BUG
			
上篇博文[ Js利用Canvas实现图片压缩 ]中做了图片压缩上传,但是在IOS真机测试的时候,发现图片预览的时候自动逆时针旋转了90度.对于这个bug,我完全不知道问题出在哪里,接下来就是面向百度编 ...
 - Android:Error:Execution failed for task ':app:clean'. > Unable to delete directory
			
as clean项目之后有时候会报错. 可以找得到目录删掉,然后重启as,但是下次clean可能又会报类似的错误. 解决方法如下: 进入File-Setting-Build,Execution,De ...
 - Vue入门系列(三)之Vue列表渲染及条件渲染实战
			
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
 - 如何加密 Windows VM 上的虚拟磁盘
			
为了增强虚拟机 (VM) 的安全性以及符合性,可以加密 Azure 中的虚拟磁盘. 磁盘是使用 Azure 密钥保管库中受保护的加密密钥加密的. 可以控制这些加密密钥,以及审核对它们的使用. 本文详细 ...
 - Distribution setup SQL Server Agent error: "RegCreateKeyEx() returned error 5, 'Access is denied.'" (转载)
			
In the Configure Distribution Wizard, the step "Configuring SQL Server Agent to start automatic ...