Longest Increasing Subsequence
Posted YuriFLAG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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?
O(n2) complexity 的解法:定义f[i], f[i] 表示到数组下标为i的最长递增子序列的长度。f[i] = max(f[i], f[j] + 1) 其中(0 <= j < i ,且nums[i] >= nums[j]).
1 public class Solution { 2 public int lengthOfLIS(int[] nums) { 3 if (nums == null || nums.length == 0) { 4 return 0; 5 } 6 int max = 0; 7 int[] f = new int[nums.length]; 8 Arrays.fill(f, 1); 9 for (int i = 0; i < nums.length; i++) { 10 for (int j = 0; j < i; j++) { 11 if (nums[i] >= nums[j]) { 12 f[i] = Math.max(f[i], f[j] + 1); 13 } 14 } 15 max = Math.max(max, f[i]); 16 } 17 return max; 18 } 19 }
以上是关于Longest Increasing Subsequence的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Longest Increasing Subsequence
Longest Increasing Subsequence
674. Longest Continuous Increasing Subsequence