给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
输入: [1,3,6,7,9,4,10,5,6]
输出: 6
这一题,我刚开始得思路就是暴力法:
创建一个数组,用来记录它此时所在得最长长度,这个最长长度就是由从前一位开始,向后遍历,计算最长的长度;如果数值相等就不需要在遍历了;
很明显这是一个O(n^2)的算法
code:
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if(nums.empty())
return 0;
int size=nums.size();
vector<int> count(size,1);
int j=0;
int Max=1;
int temp=1;
for(int i=0;i<size;i++)
{
j=i;
temp=1;
while(--j>=0)
{
if(nums[i]>nums[j])
{
Max=max(count[j]+1,Max);
temp=max(temp,count[j]+1