Sobes.tech
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
}