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
}