
Question
Given an unsorted array of integers, find the length of longest increasing subsequence.
Example:
1 2 3
|
Input: [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
|
Note:
- 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?
Answer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class { public int lengthOfLIS(int[] nums) { int len = nums.length; int[] dp = new int[len]; int max = 0; for(int i = 0; i < len; i++){ dp[i] = 1; for(int j = 0; j < i; j++) if(nums[j] < nums[i]) dp[i] = Math.max(dp[i], dp[j]+1); if(dp[i] > max) max = dp[i]; } System.out.println(max); return max; } }
|
Time complexity: $O(n^2)$
corner case: nums:[] or nums:[1]
Time complexity: $O(nlog n)$
近期评论