Junior — Middle
Ako spojiť dve zoradené sekvencie tak, aby výsledok zostal zoradený?
sobes.tech AI
Odpoveď od AI
Na spojenie dvoch zoradených sekvencií do jednej zoradenej môžete použiť algoritmus zlučovania (merge), ktorý pracuje v lineárnom čase.
Idea:
- Existujú dve zoradené pole alebo zoznamy.
- Používame dva ukazovatele, jeden pre každý pole.
- Porovnávame aktuálne prvky, menší pridávame do výsledku a posúvame príslušný ukazovateľ.
- Opakujeme, kým neprejdeme obe pole.
Príklad v Kotlin:
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++
}
}
// Pridáme zvyšné prvky
while (i < a.size) result.add(a[i++])
while (j < b.size) result.add(b[j++])
return result
}