Junior — Middle
Kaip galima sujungti dvi surūšiuotas sekas, kad rezultatas liktų surūšiuotas?
sobes.tech AI
Atsakymas iš AI
Norėdami sujungti dvi surūšiuotas sekas į vieną surūšiuotą, galite naudoti sujungimo (merge) algoritmą, kuris veikia linijiniu laiku.
Idėja:
- Yra du surūšiuoti masyvai arba sąrašai.
- Naudojame du rodyklius, po vieną kiekvienam masyvui.
- Lyginame esamus elementus, mažesnį pridedame prie rezultato ir judiname atitinkamą rodyklį.
- Kartojame, kol pereisime abu masyvus.
Pavyzdys Kotlin kalba:
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++
}
}
// Pridedame likusius elementus
while (i < a.size) result.add(a[i++])
while (j < b.size) result.add(b[j++])
return result
}