代码清单2-32(C#代码)
int LIS(int[] array)
{
int[] MaxV = new int[array.Length + 1];
MaxV[1] = array[0];
MaxV[0] = Min(array) - 1;
int[] LIS = new int[array.Length];
for(int i = 0; i < LIS.Length; i++)
{
LIS[i] = 1;
}
int nMaxLIS = 1;
for(int i = 1; i < array.Length; i++)
{
int j;
for(j = nMaxLIS; j >= 0; j--)
{
if(array[i] > MaxV[j])
{
LIS[i] = j + 1;
break;
}
}
if(LIS[i] > nMaxLIS)
{
nMaxLIS = LIS[i];
MaxV[LIS[i]] = array[i];
}
else if (MaxV[j] < array[i] && array[i] < MaxV[j + 1])
{
MaxV[j + 1] = array[i];
}
}
return nMaxLIS;
}