Sobes.tech
Junior — Middle

Jak lze spojit dvě seřazené posloupnosti tak, aby výsledek zůstal seřazený?

sobes.tech AI

Odpověď od AI

Chcete-li sloučit dvě seřazené posloupnosti do jedné seřazené, můžete použít algoritmus sloučení (merge), který pracuje v lineárním čase.

Nápad:

  • Existují dvě seřazené pole nebo seznamy.
  • Používáme dva ukazatele, jeden pro každý pole.
  • Porovnáváme aktuální prvky, menší přidáme do výsledku a posuneme odpovídající ukazatel.
  • Opakujeme, dokud neprojdeme obě pole.

Příklad v Kotlinu:

fun mergeSortedLists(a: List<Int>, b: List<Int>): List<Int> {
    val result = mutableListOf<Int>()
    var i = 0
    var j = 0
    while (i < a.size && j < b.size) {
        if (a[i] <= b[j]) {
            result.add(a[i])
            i++
        } else {
            result.add(b[j])
            j++
        }
    }
    // Přidáme zbylé prvky
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}