Sobes.tech
Junior — Middle

Como pode mesclar duas sequências ordenadas de modo que o resultado permaneça ordenado?

sobes.tech IA

Resposta da IA

Para combinar duas sequências ordenadas numa única ordenada, pode usar o algoritmo de fusão (merge), que funciona em tempo linear.

Ideia:

  • Existem dois arrays ou listas ordenadas.
  • Usamos dois ponteiros, um para cada array.
  • Comparamos os elementos atuais, o menor é adicionado ao resultado e deslocamos o ponteiro correspondente.
  • Repetimos até percorrer ambos os arrays.

Exemplo em 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++
        }
    }
    // Adiciona os elementos restantes
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}