Python
法1:动态规划
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
n = len(nums)
dp = [1] * n
max_len = 1
for i in range(1, n):
for j in range(0, i):
if nums[j] < nums[i]:
dp[i] = max(dp[i], dp[j] + 1)
max_len = max(max_len, dp[i])
return max_len
Java
法1:DP
必须掌握,O(N^2) + O(N)
class Solution {
public int lengthOfLIS(int[] nums) {
int[] dp = new int[nums.length];
Arrays.fill(dp, 1);
int res = 1;
for (int i = 1; i < nums.length; ++i) {
for (int j = 0; j < i; ++j) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
res = res > dp[i] ? res : dp[i];
}
return res;
}
}
法2:二分搜索
O(NlgN) + O(N)
patience sorting(耐心排序),参考《算法小抄》p100,介绍详细!