版权声明:码字不易,转载请注明出处: https://blog.csdn.net/qq_24309981/article/details/91350854
1 描述
Description
- Given an unsorted array of integers, find the length of longest increasing subsequence.
Example
- Input: [10,9,2,5,3,7,101,18]
- Output: 4
- Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Note
- There may be more than one LIS combination, it is only necessary for you to return the length.
- Your algorithm should run in O(n2) complexity.
- Follow up: Could you improve it to O(n log n) time complexity?
2 代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int lengthOfLIS(vector<int>& nums) {
vector<int> inc;
for (int i = 0; i < nums.size(); i++)
{
auto it = lower_bound(inc.begin(), inc.end(), nums[i]);
if (it == inc.end())
inc.push_back(nums[i]);
else
*it = nums[i];
}
return inc.size();
}
int main()
{
vector<int> nums = { 9,7,6,8,3,4,12,6,15,18 };
int result = lengthOfLIS(nums);
cout << result << endl;
system("pause");
return 0;
}
//输出
5