Сефи, я собираюсь пройти через это очень осторожно.Вы всегда должны быть осторожны, помогая людям с алгоритмами, потому что, и я не могу этого подчеркнуть, решение проблем алгоритма для программистов - то же самое, что поднятие тяжестей для профессиональных спортсменов .Знание того, как привести себя в режим мышления, как компьютера, - это то, за что вам заплатят через несколько лет.Так что, если решения вам только что дадут, вы будете парнем, который отскакивает от работы к работе каждые 6 месяцев, а не парнем, который становится ведущим разработчиком или уходит сам с успешной компанией.
Теперь, когда эта разглагольствования не существует ...
Традиционно мы думаем об алгоритмах, которые циклически обходят массив, и по-разному повторяют его в зависимости от первого результата и повторяют до тех пор, покавыполнены некоторые условия, чтобы быть O (n ^ 2).Вещи, которые соответствуют этому критерию, это сортировка выбора, вставка и пузырьковая сортировка.
Но это не обязательно.Если мы сможем правильно разделить массив на сегменты и доказать размер этих сегментов, мы сможем сохранить его в низком порядке.
И, с большинством алгоритмов «разделяй и властвуй», мы можем начать с середины.
Let A be an array of size N with N distinct elements in it.
Let M be the element that resides at A[N/2]
Let A-large be an array of all elements greater than M.
Let A-small be an array of all elements less than M.
Что мы знаем об A-small и A-large?Они одинакового размера?Может быть, но, вероятно, нет.
Является ли size(A-small) > k
?или это < k
?
Если size(A-small) == k - 1
, не сделает ли это М самым маленьким k-м элементом?
Есть ли что-то, что мы можем сделать, чтобы создать новое значение для k и сделатькакое-нибудь повторение здесь?
Я не собираюсь заканчивать это для вас, потому что должно быть много, чтобы пережевать.Это те вопросы, которые вам нужно задать себе.@templatetypedef на 100% на правильном пути, он только расширяется.
Если у вас есть еще вопросы, задавайте их, но здесь должно быть достаточно, чтобы вы могли решить их, не отнимая у вас вашихумственное упражнение.