您的位置:首页 > 产品设计 > UI/UE

[leetcode] 300. Longest Increasing Subsequence

2016-06-29 09:04 435 查看
Given an unsorted array of integers, find the length of longest increasing subsequence.

For example,
Given
[10, 9, 2, 5, 3, 7, 101, 18]
,
The longest increasing subsequence is
[2, 3, 7, 101]
, therefore the length is
4
. Note that 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?

Solution:

int lengthOfLIS(vector<int>& nums)
{
vector<int> BIS(nums.size() + 1, INT_MAX);
int len = 0;

for (int i = 0; i < nums.size(); i++)
{
for (int k = BIS.size() - 1; k >= 0; k--)
{
if ((nums[i] > BIS[k]) && (nums[i] < BIS[k + 1]))
{
BIS[k + 1] = nums[i];
}
}
if (BIS[0] > nums[i])
{
BIS[0] = nums[i];
}
}

for (len = 0; len < BIS.size(); len++)
if (BIS[len] >= INT_MAX)
break;

return len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: