LeeCode 300. Longest Increasing Subsequence(LIS)

版权声明:码字不易,转载请注明出处: 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

猜你喜欢

转载自blog.csdn.net/qq_24309981/article/details/91350854