LeetCode300 最长上升子序列

/*!
 * @file     最长上升子序列.cpp
 * @Date:    2018/03/22 17:22
 * @author:  sicaolong
 * @Contact: [email protected]
 * @brief:  
 思路:
 1、memo的状态变换;number[i]与number[j]的大小关系;
		number[i]>number[j]
			memo[i]=max(1+memo[j],memo[i]);求出m每个位置的LIS
2、循环遍历找出memo中的最大值;
 * @TODO: 
*/
#include
#include 

using namespace std;
int get_length_of_LIS_DP(vector&numbers);
int max(int a, int b)
{
	return  a > b ? a : b;
}
//=========main函数
int main()
{
	vectornumbers = { 10, 9, 2, 5, 3, 7, 101, 18 };
	int length=get_length_of_LIS_DP(numbers);
	cout<&numbers)//时间复杂度为o(n*n);
{
	if (numbers.size() == 0)
		return 0;

	vectorbest(numbers.size(), 1);
	//memo[i]表示以number[i]为结尾的LIB的长度;
	for (int i = 0; i < numbers.size();++i)
		for (int j = 0; j < i;j++)
			if (numbers[j] < numbers[i])//考察numbers[j]是不是在numbers[i]的后面
				best[i] = max(best[i], 1 + best[j]);//更新memo[i]的值;求出每个位置的LIS
	int result = 1;
	for (int i = 0; i < numbers.size(); i++)//循环遍历,找出最大的结果;并返回到result中
		result = max(result, best[i]);
	return result;
}

你可能感兴趣的:(LeetCode)