Пройдите массив один раз, сохраняя узел с минимальным значением. Пустой массив возвращает nil; при равенстве можно оставить первый найденный узел.
Функция поиска узла с наименьшим значением
Пройдите массив один раз, сохраняя узел с минимальным значением. Пустой массив возвращает nil; при равенстве можно оставить первый найденный узел.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая принимает массив объектов типа Node и возвращает элемент с минимальным значением, либо nil, если массив пуст.
public static func findMin(in nodes: [Node]) -> Node? {
}
Ответ
Пройдите массив один раз, сохраняя узел с минимальным значением. Пустой массив возвращает nil; при равенстве можно оставить первый найденный узел.
Если сравниваемое свойство Node называется value, реализация такова:
public static func findMin(in nodes: [Node]) -> Node? {
guard var best = nodes.first else { return nil }
for node in nodes.dropFirst() {
if node.value < best.value { best = node }
}
return best
}
Определение Node отсутствует, поэтому имя и тип свойства — явно оговорённое предположение; замените его реальным полем или передайте компаратор. Сложность O(n) по времени и O(1) по дополнительной памяти. Возвращается исходный элемент, а не копия его объекта.