TGViewer
Vadim Chistiakov | IT Vadim Chistiakov | IT @ios_mobile_developer · 2.17K subscribers
Post #110 1.74K
Swift for Algorithm 👌

Swift - классный язык программирования, но он не очень удобен при решения алгоритмических задач на собеседованиях. Я не владею, на должном уровне, другими языками, поэтому выбора нет.
На алгоритмических секциях отводится ограниченное количество времени на решение задачи, обычно 30-50 минут, за это время нужно понять что от тебя хотят, придумать решение и написать его. Поэтому экономить приходится каждую минуту.
Хочу обратить внимание на несколько хаков, которые помогли мне ускорить и повысить качество решений на интервью в такие компании, как Yandex, Bloomberg и AliExpress.

1. Работа со строками
В Swift это какая-то мутота. Мы не можем спокойно обратиться по порядковому номеру символа в строке и получить объект типа Character. Нужно создавать объект типа String.Index и работать с ним.

⛔️
let myString = "Hello, Swift!"
let index = myString.index(myString.startIndex, offsetBy: 7)
let characterAtIndex = myString[index]
print(characterAtIndex) // "S"


Мне больше нравится работать со строкой, как обычным массивом. У меня это получается лаконичней и быстрее. Но уточните насколько критично для решения выделение доп памяти под новый массив. Например, на собеседовании в Яндексе такой прием был допустим и интервьюер согласился, что работа со строками не сильно место в Swift)

❇️
let collectionOfCharacters = Array(myString)
let characterAtIndex = collectionOfCharacters[7]
print(characterAtIndex) // "S"


2. Сложность стандартных операций
Системные методы могут работать не так, как мы предполагаем. Был случай, что я неправильно оценил сложность алгоритма, потому что не учел сложность метода removeAll у коллекций. В документации сказано, она О(n) я подумал, что константная. ⛔️

❇️ array = [] - решает проблему выше.

3. Сигнатура метода
Обычно алгоритмические задачи предполагают написание одного метода. Прежде чем ее решать нужно выяснить все требования. Часть из них можно поместить сразу в параметры (при условии, что вы пишите все с чистого листа без шаблона, как на LeetCode).
Допустим в задаче есть двумерный массив, тогда метод может выглядеть следующим образом:

⛔️
func testMethod(array: [[Int]]) -> Int {
let n = array.count
let m = array[0].count

...
}


Но можно лучше и вам уже не придется высчитывать границы этого массива:

❇️
func testMethod(array: [[Int]], n: Int, m: Int) -> Int { … }

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

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

var numbers = [0, 1, 2, 3]

⛔️
var sum = 0
for number in numbers {
sum += number
}
print(sum)

❇️
let sumFast = numbers.reduce(0, +)
print(sumFast)


Кода меньше, пишется быстрее - профит. Map, filter, compactMap, reduce и forEach пригодятся в 80% задач на собесах.

5. Работа со словарем
Первый вариант стремный, второй православный. Тут даже не обсуждается.

var dict: [Int: Int] = [:]

⛔️
if dict[0] != nil {
dict[0]! += 1
}

❇️
dict[0, default: 0] += 1


P.S. Если интересно узнать больше об алгоритмах и собеседованих - ставьте лайки. Расскажу, как я готовился и получил предложение о работе на One day offer в Яндексе.

#swift #interview #algorithm
  • 👍 33
  • 🔥 7
  • ❤ 5
  • ❤‍🔥 2
  • 👏 2
More from @ios_mobile_developer
  1. Sep 15, 2026На днях я получил ПМЖ Великобритании 👑. Этот путь занял 2 года и 10 месяцев. Вообще, это…
  2. Sep 2, 2026Давно тебя не было в Уличных Гонках ... Начну с базы - покупка машины в Лондоне - это глуб…
  3. Aug 21, 2026Как я вижу своего подписчика на Boosty 💰 Идеальный подписчик для меня не тот, у кого опре…
  4. Aug 10, 2026Возврат машины 🚘 Покупка машины лидировала в опросе, но база собесов все-таки ее обошла,…
  5. Aug 5, 2026Post #268
  6. Aug 5, 2026Летний пост 😎 Не писал сюда несколько месяцев, было как-то плотно по работе, менторству и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →