当前位置: 首页 > 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
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 08.Android之View事件问题
  • C++入门教程(10):for 语句
  • Git 使用集
  • isset在php5.6-和php7.0+的一些差异
  • js 实现textarea输入字数提示
  • PAT A1092
  • SQLServer之创建显式事务
  • yii2中session跨域名的问题
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 系统认识JavaScript正则表达式
  • 一文看透浏览器架构
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 运行时添加log4j2的appender
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • #13 yum、编译安装与sed命令的使用
  • #ifdef 的技巧用法
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2015)JS ES6 必知的十个 特性
  • (3)STL算法之搜索
  • (arch)linux 转换文件编码格式
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET : 在VS2008中计算代码度量值
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net对接阿里云CSB服务
  • .NET企业级应用架构设计系列之开场白
  • @GlobalLock注解作用与原理解析
  • [2]十道算法题【Java实现】