Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. double straightforward( std::vector< int >& v1, std::vector< int >& v2 )
  2.     {
  3.         if( v1.empty() && v2.empty() )
  4.         {
  5.             return NAN;
  6.         }
  7.  
  8.         size_t i = v1.size();
  9.         size_t j = v2.size();
  10.         const size_t n = i + j;
  11.         size_t m = n / 2 + 1;
  12.  
  13.         int mid[ 2 ]{};
  14.         int mid_idx = 0;
  15.  
  16.         for( ; i && j && m; --m )
  17.         {
  18.             auto& a = v1[ i - 1 ];
  19.             auto& b = v2[ j - 1 ];
  20.  
  21.             if( a >= b )
  22.             {
  23.                 mid[ mid_idx ] = a;
  24.                 --i;
  25.             }
  26.             else
  27.             {
  28.                 mid[ mid_idx ] = b;
  29.                 --j;
  30.             }
  31.  
  32.             mid_idx = 1 - mid_idx;
  33.         }
  34.  
  35.         if( m )
  36.         {
  37.             auto& v = i ? v1 : v2;
  38.             auto k = i ? i : j;
  39.  
  40.             if( m == 1 )
  41.             {
  42.                 mid[ mid_idx ] = v[ k - 1 ];
  43.                 mid_idx = 1 - mid_idx;
  44.             }
  45.             else
  46.             {
  47.                 k -= m;
  48.                 mid[ 1 - mid_idx ] = v[ k ];
  49.                 mid[ mid_idx ] = v[ k + 1 ];
  50.             }
  51.         }
  52.  
  53.         if( n % 2 == 1 )
  54.         {
  55.             return mid[ 1 - mid_idx ];
  56.         }
  57.  
  58.         return ( mid[ 0 ] + mid[ 1 ] ) / 2.0;
  59.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement