当前位置: 首页 > news >正文

LeetCode -- Longest Increasing Subsequence

题目描述:


Given an unsorted array of integers, find the length of longest increasing subsequence.


For example,
Given [10, 9, 2, 5, 3, 7, 101, 18],
The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that there may be more than one LIS combination, it is only necessary for you to return the length.


Your algorithm should run in O(n2) complexity.


Follow up: Could you improve it to O(n log n) time complexity?


就是在一个数组中,找到最大递增子序列的长度,注意,这个最大递增子序列不一定是连续的。


思路:
通常根据序列求极值的问题都可以优先考虑DP,两层遍历,因此时间复杂度通常是O(N^2)。
本题也一样,先找递推式:
1.对于每个数字nums[i],i∈[0,n),只有1个数字时,它的最大长度为1,因此dp[0...n) = 1,dp[i]表示位置i的最大递增长度。
2.对于nums[i]和nums[j],如果i > j,并且nums[i] > nums[j]。那么就看dp[j] + 1是否大于dp[i],如果大于,就需要更新dp[i]。
3.返回dp中最大元素即可。


实现代码:


public class Solution {
    public int LengthOfLIS(int[] nums) 
    {
        if(nums.Length == 0){
            return 0;
        }
        
        var dp = new int[nums.Length];
	
    	for(var i = 0;i < nums.Length; i++){
    		dp[i] = 1;
    	}
    	
    	for (var i = 0; i < nums.Length; i++){
    		for (var j = 0;j < nums.Length; j++){
    			if(i <= j){
    				continue;
    			}
    			
    			if(nums[i] > nums[j] && dp[j]  + 1 > dp[i]){
    				dp[i] = dp[j] + 1;
    			}
    		}
    	}
    	
    	return dp.Max();
    }
}


相关文章:

  • LeetCode -- Serialize and Deserialize Binary Tree
  • Ubuntu中用apt安装和卸载软件
  • LeetCode -- Single Number III
  • Linux 常用C函数(内存及字符串操作篇2)
  • LeetCode -- Subsets II
  • WCDMA与CDMA2000网络结构比较
  • LeetCode -- Integer to English Words
  • WiMAX组网技术与解决方案
  • LeetCode -- Sum Root to Leaf Numbers
  • 移动设备管理(MDM)与OMA(OTA)DM协议向导(三)——AAA服务器
  • LeetCode -- Surrounded Regions
  • LeetCode -- Triangle
  • Nebula3中的骨骼动画: Animation子系统
  • LeetCode -- Ugly Number II
  • LeetCode -- Ugly Number
  • [case10]使用RSQL实现端到端的动态查询
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Angular数据绑定机制
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • extract-text-webpack-plugin用法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java面向对象及其三大特征
  • STAR法则
  • 程序员最讨厌的9句话,你可有补充?
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 开发基于以太坊智能合约的DApp
  • 离散点最小(凸)包围边界查找
  • 前端设计模式
  • 入门到放弃node系列之Hello Word篇
  • 思否第一天
  • 我从编程教室毕业
  • 项目实战-Api的解决方案
  • 小试R空间处理新库sf
  • 应用生命周期终极 DevOps 工具包
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 容器镜像
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • !$boo在php中什么意思,php前戏
  • # Java NIO(一)FileChannel
  • #HarmonyOS:Web组件的使用
  • (70min)字节暑假实习二面(已挂)
  • (C语言)球球大作战
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (办公)springboot配置aop处理请求.
  • (多级缓存)多级缓存
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (三分钟)速览传统边缘检测算子
  • (四) 虚拟摄像头vivi体验
  • (四)汇编语言——简单程序
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)linux 命令大全
  • .net core 6 集成和使用 mongodb
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例