Junior — Middle
Jak można połączyć dwie posortowane sekwencje tak, aby wynik pozostał posortowany?
sobes.tech AI
Odpowiedź od AI
Aby połączyć dwie posortowane sekwencje w jedną posortowaną, można użyć algorytmu scalania (merge), który działa w czasie liniowym.
Pomysł:
- Istnieją dwa posortowane tablice lub listy.
- Używamy dwóch wskaźników, po jednym na każdą tablicę.
- Porównujemy aktualne elementy, mniejszy dodajemy do wyniku i przesuwamy odpowiedni wskaźnik.
- Powtarzamy, aż przejdziemy przez obie tablice.
Przykład w 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++
}
}
// Dodajemy pozostałe elementy
while (i < a.size) result.add(a[i++])
while (j < b.size) result.add(b[j++])
return result
}