Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código

_Créditos das imagens: ChatGPT **Título:** LeetCode 23: Mesclando K Listas Ordenadas com Harbour/xBase e Reutilização de Código **Introdução** Olá, entusiastas de Harbour/xBase e desafios de programação! Depois de explorarmos como mesclar duas listas ordenadas no [nosso post sobre o LeetCode 21](https://www.blacktdn.com.br/2025/03/blacktdn-leetcode-21-merge-two-sorted.html), vamos dar um passo adiante e enfrentar um problema um pouco mais complexo: o LeetCode 23 - Merge K Sorted Lists. Neste artigo, vamos desvendar uma implementação em Harbour/xBase para este desafio, demonstrando como podemos inteligentemente reutilizar a solução que já construímos para o problema 21. Veremos como a modularidade e a construção sobre soluções anteriores podem simplificar problemas mais complexos. **O Problema: LeetCode 23 - Merge K Sorted Lists** O desafio é o seguinte: dado um array (`aLists` em nossa implementação) contendo `k` listas encadeadas, onde cada lista já está ordenada em ordem cres...

BlackTDN :: Resolvendo Problemas do LeetCode com xBase/TLPP: Um Novo Repositório de Soluções



_Créditos das imagens: ChatGPT_

### Resolvendo Problemas do [LeetCode](https://leetcode.com/problemset/) com (x)Base/TLPP: Um Novo Repositório de Soluções
O LeetCode é uma das plataformas mais populares para praticar algoritmos e estruturas de dados, oferecendo desafios que testam a lógica e a habilidade de resolução de problemas. Inspirado pela necessidade de explorar esses conceitos na linguagem **(x)Base**, criei o repositório [naldodj-(x)Base-leetcode-solutions](https://github.com/naldodj/naldodj-(x)Base-leetcode-solutions). 

Este repositório é um espaço dedicado para compartilhar soluções de problemas do LeetCode utilizando (x)Base/TLPP, promovendo aprendizado e inovação com esta linguagem clássica, mas ainda poderosa.
### Por que (x)Base/TLPP?  

A linguagem (x)Base/TLPP tem suas raízes no desenvolvimento de aplicações empresariais robustas, mas também oferece recursos versáteis para implementar algoritmos complexos. Resolver problemas do LeetCode com (x)Base não apenas reforça fundamentos de programação, mas também demonstra a capacidade da linguagem em aplicações modernas.
### Exemplo: Encontrando o Número Único  

A seguir, apresento um exemplo extraído do repositório. Este código resolve o problema de encontrar um número único em um array, considerando dois cenários:  
1. Um número aparece apenas uma vez, enquanto todos os outros aparecem **duas vezes**.  
2. Um número aparece apenas uma vez, enquanto todos os outros aparecem **três vezes**.

```(x)Base
/*
    Problem:
    1. Given an array of integers where every element appears three times except for one, 
       find the unique element that appears once.

    2. Given an array of integers where every element appears two times except for one, 
       find the unique element that appears once.

    Constraints:
    - Linear runtime complexity (O(n)).
    - No additional memory usage (constant space).
*/

function Main()

    local aNumbers as array
    local nOne as numeric

    // Case 1: Numbers appear two times
    aNumbers := {2, 3, 4, 1, 4, 3, 2}
    ? "Input Array (Two Times):", hb_JSONEncode(aNumbers)
    ? ""
    nOne := singleNumber(aNumbers)
    ? "The Single Number is:", nOne
    ? ""

    // Case 2: Numbers appear three times
    aNumbers := {6, 5, 9, 6, 4, 1, 7, 7, 3, 6, 10, 3, 9, 8, 5, 7, 10, 10, 3, 1, 4, 4, 5, 8, 2, 1, 8, 9}
    ? "Input Array (Three Times):", hb_JSONEncode(aNumbers)
    ? ""
    nOne := singleNumber(aNumbers)
    ? "The Single Number is:", nOne
    ? ""

return nil

// Function to find the single number in the array
static function singleNumber(aNumbers as array)

    local i, nLen as numeric
    local nOne as numeric := 0
    local nNoOne as numeric := 0

    nLen := Len(aNumbers) 

    if (Mod(nLen, 2) != 0)
        // Case 1: Numbers appear twice
        for i := 1 to nLen
            nOne := hb_bitXor(nOne, aNumbers[i])
        next i        
    else
        // Case 2: Numbers appear three times    
        for i := 1 to nLen
            if (hb_bitAnd(nNoOne, aNumbers[i]) == 0)
                nOne := hb_bitXor(nOne, aNumbers[i])
            endif
            if (hb_bitAnd(nOne, aNumbers[i]) == 0)
                nNoOne := hb_bitXor(nNoOne, aNumbers[i])
            endif
        next i
    endif
    
    return (nOne)
```

### Detalhes do Código  

- **Eficiência:** A solução utiliza operações de bit (XOR e AND) para alcançar a complexidade \(O(n)\).  
- **Generalização:** A lógica adapta-se dinamicamente para arrays que seguem diferentes padrões de repetição.  
- **Legibilidade:** Cada passo do código é claro, permitindo fácil compreensão e aprendizado.  

### Conclusão  

O repositório [naldodj-(x)Base-leetcode-solutions](https://github.com/naldodj/naldodj-(x)Base-leetcode-solutions) é uma contribuição para a comunidade de desenvolvedores interessados em resolver problemas algorítmicos usando (x)Base. Sinta-se à vontade para explorar, contribuir e aprimorar essas soluções.

Se você tem interesse em algoritmos, estruturas de dados ou na linguagem (x)Base, este repositório pode ser um excelente recurso de aprendizado.

---

Comentários

Postagens mais visitadas