【Leetcode】300. Longest Increasing Subsequence

【Leetcode】300. Longest Increasing Subsequence_第1张图片

1 使用binary search和dynamic programming

2 既然是dp解法,所以需要建一个dp数组

3 纯动态规划解法,时间复杂度是O(n**2),维护一个一维dp数组,dp[i]表示以nums[i]结尾的最长递增子序列的长度

4 binary search:时间复杂度O(nlogn),因为binary search是O(logn),再加上最外面的一层for循环。初始化一个array,把首元素放到array中,然后遍历剩下的元素,当元素比这个小时,用这个元素替换掉第一个元素,当比array中最尾部的都大时,就append到array后面,当在首元素和尾元素之间时,用二分查找法找到第一个大于等于这个元素的值,替换掉这个值,就这样一直遍历完,最后array的长度就是所求。但要注意的是,最后array的值有可能并不是一个LIS。

5 还要写一下dp的解法


【Leetcode】300. Longest Increasing Subsequence_第2张图片
【Leetcode】300. Longest Increasing Subsequence_第3张图片

你可能感兴趣的:(【Leetcode】300. Longest Increasing Subsequence)