Я думаю, что эта задача также предназначена для проверки ваших навыков в анализе проблем и сборе требований. Как уже говорили другие, для решения этой проблемы нам понадобится как минимум еще один фрагмент данных.
Мой подход заключается в том, чтобы дать понять интервьюеру, что мы можем решить проблему с одним ограничением в вызове функции: вызывающая сторона должна предоставить 2 указателя, один на начало, а другой на конец массива. Учитывая эти 2 указателя и используя базовую арифметику указателей, я достигаю этого решения; пожалуйста, дайте мне знать, что вы об этом думаете.
int *findMiddleArray( int const *first, int const *last )
{
if( first == NULL || last == NULL || first > last )
{
return NULL;
}
if( first == last )
{
return (int *)first;
}
size_t dataSize= ( size_t )( first + 1 ) - ( size_t )first,
addFirst= ( size_t )first,
addLast= ( size_t )last,
arrayLen= ( addLast - addFirst) / dataSize + 1,
arrayMiddle= arrayLen % 2 > 0 ? arrayLen / 2 + 1 : arrayLen / 2;
return ( int * )( ( arrayMiddle - 1 ) * dataSize + addFirst );
}