Алгоритмы, алгоритмы...

Разговаривал с коллегой, и вот задал он такую задачку:

Алгоритмы, алгоритмы... - 890976403943
Я решил ее двумя способами:
Алгоритмы, алгоритмы... - 890976465383
Очевидно что у каждого способа есть свои плюсы и минусы. Первый вариант не требует дополнительных трат памяти, т.к. работает напрямую с входящим массивом. Однако если данных много, а искомые значения в конце массива (худший случай), то алгоритм будет работать достаточно медленно. Т.е. скорость его работы не линейная и зависит от того, в каком месте массива находятся данные. Второй напротив, работает с линейно скоростью (ну или почти). Не зависимо где находятся данные, их поиск будет всегда занимать одинаковое время. Однако он потребляет в два раза больше памяти и требует время на ее распределение в map.Вывод напрашивается сам собой: нет универсального решения. Алгоритм зависит от задачи.

Комментарии

  • 31 янв 2020 04:18
    Что это за функция  такая, которая возвращает два значения? Всю жизнь было одно.
  • 31 янв 2020 10:22
    Это язык golang. Там функция может возвращать больше одного значения. Хоть 5, но на практике я больше трех не видел. А вообще это офигенно удобно.
    Хотя конечно я мог и просто массив вернуть.
  • 31 янв 2020 10:30
    В этом языке много "синтаксического сахара". Посмотрите на это:
    if idx, ok := m[c]; ok && idx != i {
     idx, ok := m[c] - это так поиск в map происходит. Если значение будет найдено, то ok = true, а idx будет содержать значение. Причем все это происходит в рамках if. Т.е. объявляются переменные (:= это объявление с присваиванием), вызывается функция и проверяется условие. Переменные будут видны только в этом if.
  • 31 янв 2020 22:18
    Не то что бы конкретно эта функция имела какой то практический смысл, это скорее задача на способность мыслить. Тест который дают на собеседованиях. Но вообще конечно ее можно использовать для каких то задач. Ну например где нибудь в системе бронирования билетов. Человеку нужно слетать из пункта А, в пункт Б и обратно. У него есть N рублей на все. Тогда входной массив это цены на билеты по дням года. Нужно подобрать даты вылета, что бы уложится в эту сумму. Вот такая функция может помочь, подсказать.