Нахождение максимальных значений в массиве на определенном расстоянии друг от друга - PullRequest
3 голосов
/ 27 февраля 2012

У меня есть массив целых, которые представляют высоты, и мне нужно выяснить, сколько из этих высот сможет увидеть горизонт к западу (массив организован с запада на восток). Требование видеть горизонт выше, чем последние n / 5 высот, где n - длина массива.

Это было бы легко с двумя циклами for, но я должен сделать это в O (n). Так что я могу перебирать массив только один раз. Мне не нужно решение, просто нажмите в правильном направлении.

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Как насчет работы в обратном направлении через массив?Начните с конца и создайте очередь на каждой пройденной вами высоте.Если вы видите высоту, превышающую текущую, то ни одна из высот в очереди не может видеть горизонт (так что вы можете выбросить их).Если вы доберетесь до n / 5, то последняя высота в очереди может видеть горизонт (и, очевидно, вам потребуется обработать случай, когда в очереди более n / 5 элементов).

0 голосов
/ 28 февраля 2012

Высота будет видна на горизонте, если она является максимальной высотой в скользящем окне размера = n / 5.

Задача «Максимум в скользящем (движущемся) окне» имеет сложность O (n). Найти решение можно как в SO, так и в Интернете.

Подсказка: используйте простые структуры данных - очереди или стеки

0 голосов
/ 27 февраля 2012

Вы действительно должны прочитать это
http://en.wikipedia.org/wiki/Selection_algorithm

...