zip проходит до длины более короткого среза и создаёт для каждого индекса отдельную пару. Сложность — O(min(len(a), len(b))).
Создание функции zip для объединения двух массивов
zip проходит до длины более короткого среза и создаёт для каждого индекса отдельную пару. Сложность — O(min(len(a), len(b))).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию zip, которая:
- Принимает два среза a и b (может быть разной длины).
- Возвращает двумерный срез [][]int, где каждый вложенный элемент представляет собой пару [a[i], b[i]].
- Если размеры входных срезов различаются, объединение продолжается только до минимального из их размеров.
Требуется написать функцию zip, которая:
Принимает два слайса s1 и s2 (возможны разной длины).
Возвращает слайс слайсов [][]int, где каждый элемент — это пара [s1[i], s2[i]].
Если длины слайсов не совпадают, объединение происходит до конца короткого слайса
Ответ
zip проходит до длины более короткого среза и создаёт для каждого индекса отдельную пару. Сложность — O(min(len(a), len(b))).
Внешний срез и пары принадлежат результату: последующая замена чисел в исходных срезах не изменит созданные пары.
func zip(a, b []int) [][]int {
n := len(a)
if len(b) < n {
n = len(b)
}
result := make([][]int, n)
for i := 0; i < n; i++ {
result[i] = []int{a[i], b[i]}
}
return result
}
Если хотя бы один аргумент пуст, возвращается пустой срез. Память O(n), где n — количество пар; различие nil и пустого результата при необходимости фиксируют в контракте.