Junior — Middle
Kuidas saab kahe sorteeritud massiivi ühendada uueks sorteeritud massiiviks, kasutades selleks täiendavat mälu?
sobes.tech AI
Vastus AI-lt
Kaks järjestatud massiivi ühendamiseks uueks järjestatud massiiviks, kasutades täiendavat mälu, saab rakendada ühendamise (merge) algoritmi, mis sarnaneb merge sort'i sammu või osaga.
Idee:
- Loo uus massiiv, mille suurus on võrdne kahe algse massiivi suuruste summaga.
- Kasuta kahte näidikut, ühe iga massiivi jaoks.
- Võrdle mõlema massiivi praeguseid elemente, väiksemat lisa uude massiivi ja liigu vastava näidiku suunas.
- Kui üks massiividest lõpeb, lisa ülejäänud teise massiivi elemendid.
Näide Kotlinis (Android):
fun mergeSortedArrays(arr1: IntArray, arr2: IntArray): IntArray {
val result = IntArray(arr1.size + arr2.size)
var i = 0
var j = 0
var k = 0
while (i < arr1.size && j < arr2.size) {
if (arr1[i] <= arr2[j]) {
result[k++] = arr1[i++]
} else {
result[k++] = arr2[j++]
}
}
while (i < arr1.size) {
result[k++] = arr1[i++]
}
while (j < arr2.size) {
result[k++] = arr2[j++]
}
return result
}
See algoritm töötab O(n + m) ajal, kus n ja m on massiivide suurused, ning kasutab täiendavat mälu uue massiivi jaoks.