Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է միացնել երկու դասավորված հաջորդականություններ այնպես, որ արդյունքը մնա դասավորված։

sobes.tech AI

Պատասխան AI-ից

Երկու դասավորված հաջորդականությունները միացնելու համար, կարող եք օգտագործել միացման (merge) ալգորիթմը, որը աշխատում է գծային ժամանակում:

Իդեա:

  • Կան երկու դասավորված զանգվածներ կամ ցանկեր:
  • Օգտագործում ենք երկու ցուցիչ, յուրաքանչյուրը՝ մեկ զանգվածի համար:
  • Համեմատում ենք ընթացիկ տարրերը, փոքրին ավելացնում ենք արդյունքին և շարժում համապատասխան ցուցիչը:
  • Կրկնում ենք մինչև երկու զանգվածներն էլ անցնենք:

Օրինակ 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++
        }
    }
    // Ավելացնում ենք մնացած տարրերը
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}