Создание функции zip для объединения двух массивов

zip проходит до длины более короткого среза и создаёт для каждого индекса отдельную пару. Сложность — O(min(len(a), len(b))).

Короткий ответ

Что ответить на собеседовании

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 и пустого результата при необходимости фиксируют в контракте.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее