Longest Increasing Subsequence
Given [10, 9, 2, 5, 3, 7, 101, 18],Basic Idea:
dp[i] = max[dp[j] for j < i and nums[j] < nums[i]] + 1 class Solution {
public int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];
dp[0] = 1;
for (int i = 1; i < nums.length; ++i) {
int prevMax = 0;
for (int j = 0; j < i; ++j) {
if (nums[j] < nums[i]) prevMax = Math.max(prevMax, dp[j]);
}
dp[i] = prevMax + 1;
}
int ret = 0;
for (int i = 0; i < dp.length; ++i) {
ret = Math.max(ret, dp[i]);
}
return ret;
}
}Update: O(NlogN) Solution
O(NlogN) SolutionLast updated