Sobes.tech
Junior — Middle

Kā var apvienot divas sakārtotas secības tā, lai rezultāts paliktu sakārtots?

sobes.tech AI

Atbilde no AI

Lai apvienotu divas sakārtotas secības vienā sakārtotā secībā, var izmantot apvienošanas (merge) algoritmu, kas darbojas lineārā laikā.

Ideja:

  • Ir divas sakārtotas masīvi vai saraksti.
  • Katram no tiem izmantojam divus rādītājus.
  • Salīdzinām pašreizējos elementus, mazāko pievienojam rezultātam un virzām atbilstošo rādītāju.
  • To darām, kamēr abi masīvi ir pārbaudīti.

Kotlin piemērs:

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++
        }
    }
    // Pievienojam atlikušos elementus
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}