博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Longest Increasing Subsequence 最长递增子序列
阅读量:6606 次
发布时间:2019-06-24

本文共 2341 字,大约阅读时间需要 7 分钟。

Given a sequence of integers, find the longest increasing subsequence (LIS).

You code should return the length of the LIS.

Have you met this question in a real interview?

Example

For [5, 4, 1, 2, 3], the LIS  is [1, 2, 3], return 3

For [4, 2, 4, 5, 3, 7], the LIS is [4, 4, 5, 7], return 4

Challenge

Time complexity O(n^2) or O(nlogn)

Clarification

What's the definition of longest increasing subsequence?

    * The longest increasing subsequence problem is to find a subsequence of a given sequence in which the subsequence's elements are in sorted order, lowest to highest, and in which the subsequence is as long as possible. This subsequence is not necessarily contiguous, or unique.  

    * https://en.wikipedia.org/wiki/Longest_common_subsequence_problem

我们先来看一种类似Brute Force的方法,这种方法会找出所有的递增的子序列,并把它们都保存起来,最后再找出里面最长的那个,时间复杂度为O(n2),参见代码如下:

class Solution {public:    /**     * @param nums: The integer array     * @return: The length of LIS (longest increasing subsequence)     */    int longestIncreasingSubsequence(vector
nums) { vector
> solutions; longestIncreasingSubsequence(nums, solutions, 0); int res = 0; for (auto &a : solutions) { res = max(res, (int)a.size()); } return res; } void longestIncreasingSubsequence(vector
&nums, vector
> &solutions, int curIdx) { if (curIdx >= nums.size() || curIdx < 0) return; int cur = nums[curIdx]; vector
best_solution; for (int i = 0; i < curIdx; ++i) { if (nums[i] <= cur) { best_solution = seqWithMaxLength(best_solution, solutions[i]); } } vector
new_solution = best_solution; new_solution.push_back(cur); solutions.push_back(new_solution); longestIncreasingSubsequence(nums, solutions, curIdx + 1); } vector
seqWithMaxLength(vector
&seq1, vector
&seq2) { if (seq1.empty()) return seq2; if (seq2.empty()) return seq1; return seq1.size() < seq2.size() ? seq2 : seq1; } };

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
我的友情链接
查看>>
Linux压力测试
查看>>
JAVA中的线程机制(二)
查看>>
nginx安装与配置2(转载)
查看>>
Linux下Mongodb安装和启动配置
查看>>
2015 成长计划
查看>>
沈阳一饭店凌晨爆燃,燃气报警器时刻预防
查看>>
Redis 与 数据库处理数据的两种模式
查看>>
VUE2中axios的使用方法
查看>>
CS 229 notes Supervised Learning
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>
DataTable转换成json字符串
查看>>
ubuntu 12.04 安装 redis
查看>>
Sql Server中不常用的表运算符之APPLY(1)
查看>>
【DM642】ICELL Interface—Cells as Algorithm Containers
查看>>
linux所有命令失效的解决办法
查看>>
力扣算法题—085最大矩阵
查看>>
svs 在创建的时候 上传文件夹 bin obj 这些不要提交
查看>>
mysql-用命令导出、导入表结构或数据
查看>>
Tinkphp
查看>>