Деды говорят что когда то на собесах на должность разраба спрашивали алгоритмы и давали незатейлевые задачи на быстрый расчет.
Так вот Даже я в свои былые времена сталкивался с этими задачами. Я был молод глуп и рвался в бой поэтому на теорию клал свой большой "энтузиазм", в прочем на этом то мне и говорили АдЪес амигос DasWindows мучачос. Спустя годы и спустя время поиска какой нить новой темы Я все таки завалил лень и сел думать "Что бы такого написать????"
Мне не давала покоя одна тема которую я увидел на одном из онлайн собесов на должность младшего PYTHOOO'шары.
Задача была довольно таким интересной, Связана с алгоритмом поиска максимума в массиве, но как в том анекдоте про нюанс, все было не много усложнено.
1) использую задачу нахождения максимума, найти второй максимум в массиве.
2) это нужно сделать за один проход цикла по массиву.
Гениальным решением Васьки с курсов Гикнутых Мозгов, который прошел не одно осеменение на курсах Коробочных Skill_ОвиЧКОв (Все максимально завуалировал что бы не дай бог не подумали что я ИНФОЦИГАН тут рекламирую) было бы упорядочить значения массива отСАРТИРовав их от большего к меньшему и просто взять второй элемент.
Но увы Вася, потому ты и Вася, что это будет не однократный проход по массиву. Даже если ты и будешь кричать что ты в коде не использовал цикл, ты все равно не прав. Его за тебя использовал Фреймворк и это считается, по этому вот дверь вот порог и нафиг с пляжу.
Но как же на самом деле получить второй максимум ???
Все просто мы просто ищем первый максимум а во второй заносит все то что меньше первого. и при проходке используем всего 2 условия.
Для начала, нам как всегда лень писать заготовленные массивы по этому мы будем брать то что заколотят в ручную.. Хотяаааааа можно было бы подключить БРЕДогениатор и генерить массивы, но эти свои грязные развратные делишки будете сами делать в темноте под одеялом )
Чистим массив от пробелов в начале и конце что бы чего лишнего не схватить, благодаря вашим не мытым шалавливым ручонкам. Потом просто делим строку на массив с помощью разделителей, на всякий случай указал возможные, но не шалить всякими непотребными "?&^!*%" и вуаля у нас есть массив. Далее объявляем две переменных это первый и второй максимум. Поскольку мы не найдем второй не зная первого.
И понеслась. Как и положено искать будем за один проход цикла. Поэтому ни каких FOR и While Только хард бас Forerch
И два условия которые описывают всю логику.
Тадань БлЭтЪ и мы получаем
Но ты не ты когда ты ГАВ_NO кодер.
- Димон кодь нормально.
-Ок. Ответил я потирая шишку, а что если мы это дело заLINQушим???
А чо бы и нет и начал колотить своими шалавливыми пальчонками по клавишам. И тут я понял. Хоть и задача на вычисление с использованием условий, но мы то будем работать с ней запросом. По этому мы не скажем Ваську что здесь то как раз САРТИРовОЧКА то и подходит ))))
И так мы просто приводим массив к нужному нам типу преобразуя у нужный нам списочный тип. Делаем простой запрос с сортировкой по убыванию и при необходимости нахождения нужного максимума просто извлекаем его. Поскольку запросы обрабатываются быстрей чем циклы, А это мы знаем из прошлой статьи борьбы добра с forerch Получаем вот такую не замысловатую штуку.
У нормальных людей отчет идет с единицы, у программистов в нуля
Дэвид Семенович Стэтхэм
#программирование #linq #csharp #c# #запросы #весело #программирование с нуля #Алгоритмы #максимум