Sobes.tech
Back to questions
Middle+
4

// Given sorted slices A and B. Slices keep unique values. Produce a union of them into sorted slice RES without duplicates. // A = [1, 3, 5, 7] // B = [1, 2, 3, 7, 9] // RES = [1, 2, 3, 5, 7, 9]

Companies where asked
YadroYadro

Answer from AI

sobes.tech AI

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

Идея:

  • Идти по обоим срезам одновременно двумя индексами.
  • Сравнивать текущие элементы, добавлять меньший в результат и двигать соответствующий индекс.
  • Если элементы равны, добавить один из них и продвинуть оба индекса.

Пример на Go:

func unionSortedSlices(A, B []int) []int {
    i, j := 0, 0
    res := make([]int, 0, len(A)+len(B))

    for i < len(A) && j < len(B) {
        if A[i] < B[j] {
            res = append(res, A[i])
            i++
        } else if A[i] > B[j] {
            res = append(res, B[j])
            j++
        } else { // A[i] == B[j]
            res = append(res, A[i])
            i++
            j++
        }
    }

    // Добавляем оставшиеся элементы
    for i < len(A) {
        res = append(res, A[i])
        i++
    }
    for j < len(B) {
        res = append(res, B[j])
        j++
    }

    return res
}

Этот код гарантирует, что в результирующем срезе будут все уникальные элементы из A и B, отсортированные по возрастанию.