Найти тему
ГАФ NOкодЭ (Code)

Интересная задача на вакансию программиста.

Деды говорят что когда то на собесах на должность разраба спрашивали алгоритмы и давали незатейлевые задачи на быстрый расчет.

Так вот Даже я в свои былые времена сталкивался с этими задачами. Я был молод глуп и рвался в бой поэтому на теорию клал свой большой "энтузиазм", в прочем на этом то мне и говорили АдЪес амигос DasWindows мучачос. Спустя годы и спустя время поиска какой нить новой темы Я все таки завалил лень и сел думать "Что бы такого написать????"

Мне не давала покоя одна тема которую я увидел на одном из онлайн собесов на должность младшего PYTHOOO'шары.

Мне еще сахарку можно а то Пятая точка не совсем слиплась.
Мне еще сахарку можно а то Пятая точка не совсем слиплась.

Задача была довольно таким интересной, Связана с алгоритмом поиска максимума в массиве, но как в том анекдоте про нюанс, все было не много усложнено.

1) использую задачу нахождения максимума, найти второй максимум в массиве.

2) это нужно сделать за один проход цикла по массиву.

Гениальным решением Васьки с курсов Гикнутых Мозгов, который прошел не одно осеменение на курсах Коробочных Skill_ОвиЧКОв (Все максимально завуалировал что бы не дай бог не подумали что я ИНФОЦИГАН тут рекламирую) было бы упорядочить значения массива отСАРТИРовав их от большего к меньшему и просто взять второй элемент.

Но увы Вася, потому ты и Вася, что это будет не однократный проход по массиву. Даже если ты и будешь кричать что ты в коде не использовал цикл, ты все равно не прав. Его за тебя использовал Фреймворк и это считается, по этому вот дверь вот порог и нафиг с пляжу.

Придание линейного ускорения объекту путем разовой стимуляции пятой точки
Придание линейного ускорения объекту путем разовой стимуляции пятой точки

Но как же на самом деле получить второй максимум ???

Все просто мы просто ищем первый максимум а во второй заносит все то что меньше первого. и при проходке используем всего 2 условия.

Для начала, нам как всегда лень писать заготовленные массивы по этому мы будем брать то что заколотят в ручную.. Хотяаааааа можно было бы подключить БРЕДогениатор и генерить массивы, но эти свои грязные развратные делишки будете сами делать в темноте под одеялом )

Чистим массив от пробелов в начале и конце что бы чего лишнего не схватить, благодаря вашим не мытым шалавливым ручонкам. Потом просто делим строку на массив с помощью разделителей, на всякий случай указал возможные, но не шалить всякими непотребными "?&^!*%" и вуаля у нас есть массив. Далее объявляем две переменных это первый и второй максимум. Поскольку мы не найдем второй не зная первого.

-3

И понеслась. Как и положено искать будем за один проход цикла. Поэтому ни каких FOR и While Только хард бас Forerch

И два условия которые описывают всю логику.

-4

Тадань БлЭтЪ и мы получаем

-5

Но ты не ты когда ты ГАВ_NO кодер.

- Димон кодь нормально.

-Ок. Ответил я потирая шишку, а что если мы это дело заLINQушим???

А чо бы и нет и начал колотить своими шалавливыми пальчонками по клавишам. И тут я понял. Хоть и задача на вычисление с использованием условий, но мы то будем работать с ней запросом. По этому мы не скажем Ваську что здесь то как раз САРТИРовОЧКА то и подходит ))))

И так мы просто приводим массив к нужному нам типу преобразуя у нужный нам списочный тип. Делаем простой запрос с сортировкой по убыванию и при необходимости нахождения нужного максимума просто извлекаем его. Поскольку запросы обрабатываются быстрей чем циклы, А это мы знаем из прошлой статьи борьбы добра с forerch Получаем вот такую не замысловатую штуку.

-6
У нормальных людей отчет идет с единицы, у программистов в нуля
Дэвид Семенович Стэтхэм

#программирование #linq #csharp #c# #запросы #весело #программирование с нуля #Алгоритмы #максимум