Junior — Middle
Jak lze spojit dva seřazené pole do nového seřazeného pole s použitím dodatečné paměti?
sobes.tech AI
Odpověď od AI
Pro spojení dvou seřazených polí do nového seřazeného pole s použitím dodatečné paměti lze použít algoritmus sloučení (merge), podobný kroku ze sloučení řazení.
Nápad:
- Vytvořte nové pole, jehož velikost je rovna součtu velikostí obou původních polí.
- Použijte dva ukazatele, jeden pro každé pole.
- Porovnejte aktuální prvky obou polí, přidejte menší do nového pole a posuňte odpovídající ukazatel.
- Když jedno z polí skončí, přidejte zbývající prvky druhého pole.
Příklad v Kotlin (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
}
Tento algoritmus pracuje v čase O(n + m), kde n a m jsou velikosti polí, a používá dodatečnou paměť pro nové pole.