题目:

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

You code should return the length of the LIS.

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_increasing_subsequence

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 [2, 4, 5, 7], return 4

题解:

  For dp[i], dp[i] is max(dp[j]+1, dp[i]), for all j < i and nums[j] < nums[i].

Solution 1 ()

class Solution {
public:
int longestIncreasingSubsequence(vector<int> nums) {
if (nums.empty()) {
return ;
}
vector<int> dp(nums.size(), );
int res = ;
for (int i = ; i < nums.size(); ++i) {
for (int j = ; j < i; ++j) {
if (nums[j] < nums[i]) {
dp[i] = max(dp[i], dp[j] + );
}
}
res = max(dp[i], res);
}
return res;
}
};

Solution 2 ()

class Solution {
public:
/**
* @param nums: The integer array
* @return: The length of LIS (longest increasing subsequence)
*/
int longestIncreasingSubsequence(vector<int> nums) {
vector<int> res;
for(int i=; i<nums.size(); i++) {
auto it = std::lower_bound(res.begin(), res.end(), nums[i]);
if(it==res.end()) res.push_back(nums[i]);
else *it = nums[i];
}
return res.size();
}
};

Solution 3 ()

class Solution {
public:
int longestIncreasingSubsequence(vector<int> nums) {
if (nums.empty()) {
return ;
}
vector<int> tmp;
tmp.push_back(nums[]);
for (auto num : nums) {
if (num < tmp[]) {
tmp[] = num;
} else if (num > tmp.back()) {
tmp.push_back(num);
} else {
int begin = , end = tmp.size();
while (begin < end) {
int mid = begin + (end - begin) / ;
if (tmp[mid] < num) {
begin = mid + ;
} else {
end = mid;
}
}
tmp[end] = num;
}
}
return tmp.size();
}
};

最新文章

  1. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)
  2. springMvc源码学习之:spirngMVC获取请求参数的方法2
  3. C#时间处理--DateTime和TimeSpan
  4. Java与MySql数据类型对照表
  5. 新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API
  6. C# 面向对象编程的继承性-多继承
  7. js常用 禁止F5 和右键
  8. block 做参数
  9. DataTables给表格绑定事件
  10. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇
  11. js登录,回车登录
  12. Leetcode_202_Happy Number
  13. 与其想当然的 overdesign,不如自己动手做个试验
  14. Win7远程桌面:发生身份验证错误
  15. 【AtCoder】ARC076
  16. 尝试IRC &amp; freenode
  17. [pytorch修改]dataloader.py 实现darknet中的subdivision功能
  18. (转)Java中equals和==、hashcode的区别
  19. char/unsigned char/int/short 存储范围
  20. Axure 图片轮播(广告通栏图片自动播放效果)

热门文章

  1. Qt4.8.5配置相关问题
  2. 2个YUV视频拼接技术
  3. Struts2实现input数据回显
  4. Erlang的系统限制
  5. 利用expload 分割字符串 变成数组
  6. android自己定义TextView
  7. OpenStack 使用Ceph 配置指导
  8. linux 设置静态IP方法
  9. c++标准库比较
  10. php总结7——文件函数库、序列化数据、文件包含