Find the length of the longest subsequence of a given sequence

int lis( int arr[], int n )
{
   int *lis, i, j, max = 0;
   lis = (int*) malloc ( sizeof( int ) * n );
 
   for ( i = 0; i < n; i++ )
      lis[i] = 1;
    
   /* Compute optimized LIS values in bottom up manner */
   for ( i = 1; i < n; i++ )
      for ( j = 0; j < i; j++ )
         if ( arr[i] > arr[j] && lis[i] < lis[j] + 1)
            lis[i] = lis[j] + 1;
    
   // To get Max element in lis[]
   for ( i = 0; i < n; i++ )
      if ( max < lis[i] )
         max = lis[i];
 
   free( lis );
 
   return max;
}

Test case

{ 10, 22,  9, 33}

 i=1 j=0 
 lis[1] = 2
 
 i=2 j=0     i=2 j=1
 no change
 
 i=3 j=0     i=3 j=1     i=3 j=2
 lis[3] =2   lis[3] =3   
 
 max = 3

Leave a comment