关闭

LeetCode Longest Increasing Subsequence

标签: leetcode
223人阅读 评论(0) 收藏 举报
分类:

题目:

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.

给定一个数组,然后计算数组中的最长递增子序列的长度,要求在O(n^2)的时间复杂度内完成。首先一开始这题我不是很理解,以为是这个最长递增子序列,是要求每一段中都是连续递增的,其实它是可以断断续续的,也就是说其实它是可以中间断的,不一定要连续,那么考虑采用动态规划来做,其实这也是一道非常典型的动态规划的题目,考虑当前的状态和状态转移方程。首先我们看到当循环到当前这个数组下标的值时,考虑与之前的每一个数组下标中的元素的值的大小比较情况,其实也就是d(i) = max{1,d(j) + 1},其中j < i,A[j] <= A[i],就是在内层循环中得每一个都得和当前的比,如果是比当前的那个值大的,那么当前位置对应的那个d(j)值就加1,然后赋给d(i),每次在内层循环完之后,就判断和最大的那个比较,如果比最大的那个还大,那么就赋值,否则就不用赋值。

public class Solution 
{
    public int lengthOfLIS(int[] nums)
	{
		int length = nums.length;
		if(length == 0)
		    return 0;
		int len = 1;
		int[] lis = new int[length + 1];
		for(int i = 0; i < length; i++)
		{
			lis[i] = 1;
			for(int j = 0; j < i; j++)
			{
				if(nums[j] < nums[i] && lis[j] + 1 > lis[i])
					lis[i] = lis[j] + 1;
			}
			if(lis[i] > len)
				len = lis[i];
		}
		return len;
	}
}



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

LeetCode Longest Palindromic Substring 最长回文子字符串 两种方法分析解答

最难想的地方:P代表一个表,比较难想的就是P表的下标i和j代表原字符串中的两个前后下标s[i]和s[j]的位置。 如果P[i,j]为真,当且仅当si-1,si-2...sj-1,sj这一个子串都为pa...
  • kenden23
  • kenden23
  • 2013-11-23 10:27
  • 2816

[动态规划] 最长递增子序列 (Longest Increasing Subsequence)

1.复杂度为O(n^2) const int maxn=100020; const int inf=0x3f3f3f3f; int dp[maxn];//以a[i]为结尾的最长自增子序列长度 int...
  • sr19930829
  • sr19930829
  • 2014-12-23 11:56
  • 1573

算法笔记-1-最大子列和-Maximum Subsequence Sum

题目内容: Given a sequence of KK integers {N1,N2,...,NK N_1, N_2, ..., N_K}. A continuous subsequence...
  • plank_root
  • plank_root
  • 2016-09-18 22:58
  • 1450

LeetCode 300.Longest Increasing Subsequence 在一维数组中找最长序列(好题)

题目 Given an unsorted array of integers, find the length of longest increasing subsequence. For...
  • gddxmmxf
  • gddxmmxf
  • 2017-04-13 02:45
  • 108

LeetCode 300: Longest Increasing Subsequence

最长增加的子序列问题,归于动态规划问题。分析:从最后面的数往前去找。假设串为[10,9,2,5,3,7,101,18],我们从最后一个数18开始找,那么18这个数我们到底需不需要第一步就将它加入到最长...
  • dingchenxixi
  • dingchenxixi
  • 2016-11-27 16:29
  • 180

Leetcode Algorithm 300. Longest Increasing Subsequence

Leetcode Algorithm 300. Longest Increasing Subsequence 给定一个乱序的整形数组,寻找其中最长严格上升子序列的最大长度
  • rinsonlo
  • rinsonlo
  • 2017-04-09 22:50
  • 136

Leetcode 300. Longest Increasing Subsequence (Medium) (cpp)

300. Longest Increasing Subsequence (Medium)
  • Niko_Ke
  • Niko_Ke
  • 2016-08-24 10:48
  • 279

leetcode 300.Longest Increasing Subsequence(最长递增子序列) O(nlogn)算法

leetcode 300.Longest Increasing Subsequence(最长递增子序列) ,网上多是动态规划,复杂度为O(n^2)算法;本文设计一个O(nlogn)算法,即维护最小的最...
  • qingyin_1991
  • qingyin_1991
  • 2016-09-09 16:09
  • 163

[LeetCode]Longest Increasing Subsequence

这是一道典型的动态规划问题,通常有两种解法,一种自然的思想时间复杂度为O(n^2),而另一种巧妙地思路可以利用二分查找把时间复杂度降低到O(nlogn)。下面分别介绍这两种做法。
  • xyt8023y
  • xyt8023y
  • 2015-11-03 17:22
  • 921

LeetCode-300.Longest Increasing Subsequence

https://leetcode.com/problems/longest-increasing-subsequence/ Given an unsorted array of integers,...
  • zmq570235977
  • zmq570235977
  • 2016-05-26 22:29
  • 619
    个人资料
    • 访问:174112次
    • 积分:4203
    • 等级:
    • 排名:第8407名
    • 原创:243篇
    • 转载:108篇
    • 译文:0篇
    • 评论:28条
    最新评论