Это вопрос домашнего задания, поэтому я хотел бы избежать полных ответов и предпочел бы подсказки, если это возможно.
Учитывая массив случайных целых чисел A [1 ... x], программа должна вернуть первые элементы массива y в порядке увеличения, где 1 <= y <= sqrt (x). Итак, в основном, учитывая массив [5,9,2,8] и y = 2, программа должна вернуть [2,5]. </p>
Ответ "отсортировать сначала, вернуть первые y элементов" отсутствует в окне, так как лучшее, что мы можем сделать, это n * logn time с объединением или быстрой сортировкой. Таким образом, в ответе должен использоваться тот факт, что мы возвращаем только самое большее sqrt (x) элементов, и единственный другой ответ, который у меня есть, - это поиск цикла за минимальным элементом в массиве, удаляя минимум из массив, сохраняя его в новом массиве, скажем, B, и повторяя процесс для теперь уменьшенной модифицированной версии A длиной x-1, что дает нам время выполнения следующим образом:
x + (x-1) + (x-2) + ... + (x-y)
Это подсчитывает количество итераций цикла for в минимальном поиске и дает нам самое большее y или sqrt (x) итераций в худшем случае, и в массиве есть не более x элементов. Таким образом, мы имеем sqrt (x) * x, который лучше, чем O (n * logn), но все еще не совсем O (n): /.