您的位置:首页 > 其它

最长上升子序列LIS O(nlgn)算法

2011-12-15 14:57 183 查看
问题就不描述了,相信来看这个算法的人都清楚。

int LIS(int str[],int len)
{
int max,left,right,i,mid;
lis[1] = str[0];
max = 1;
for(i=1; i<len; i++)
{
if(str[i] > lis[max])
{
lis[++max] = str[i];
}
else
{
left = 1;
right = max;
while(left <= right)
{
mid = (left+right)/2;
if(str[i] > lis[mid])
left = mid + 1;
else if(str[i] < lis[mid])
right = mid - 1;
else
break;
}
lis[left] = str[i];
}
}
return max;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法