Это вопрос, который у меня возник во время интервью, и я нашел ответ с небольшим намеком интервьюера, который был «Как вы сравниваете два числа?»(это действительно помогло).
Вот объяснение:
Допустим, у меня есть 100 чисел (вы можете легко заменить его на n, но оно лучше работает для примера, если n - четное число).Что я делаю, так это то, что я разбил его на 50 списков по 2 числа.Для каждой пары я делаю одно сравнение, и я готов (что к настоящему времени делает 50 сравнений), тогда мне просто нужно найти минимум минимумов (который составляет 49 сравнений) и максимум максимумов (который также составляет 49 сравнений)) такое, что нужно сделать 49 + 49 + 50 = 148 сравнений.Мы закончили!
Примечание: чтобы найти минимум, мы поступаем следующим образом (в псевдокоде):
n=myList.size();
min=myList[0];
for (int i(1);i<n-1;i++)
{
if (min>myList[i]) min=myList[i];
}
return min;
И мы находим его в (n-1) сравнениях.Код почти одинаков для максимума.