Executando verificação de segurança...
1
GabaM
1 min de leitura ·

Explique um Dynamic Array para um iniciante. C#

Olá pessoal, essa é minha primeira postagem, venho com o bom e velho desespero de um Dev Iniciante. Faz algum tempo que estou estudando Estrutura de Dados e agora iniciei uma rotina de resolução de desafios na HackerRank, tenho me saído até que bem, mas agora me encontro perdido com o enunciado do desáfio de Dynamic Array:Desafio

Só gostaria de uma nova explicação, cheguei a ver vídeos e ler alguns blogs que comentavam sobre, mas mesmo assim ainda estou perdido. Rodei um código de exemplo no Visual Studio pra ver se na hora de Debugar eu consegueria entender, contudo o fato do enunciado me parecer confuso ainda me frusta. Agradeço se alguém puder ajudar.

Ps: Estou codando em C#, mas aceito explicações em outras linguagens tranquilamente.

Carregando publicação patrocinada...
3

O enunciado é meio confuso, mas depois de alguns minutos não é tão difícil entender. Ele basicamente descreve que tem dois tipos de operações (que ele chamou de "queries"). Ambas estão no formato 1 x y ou 2 x y, ou seja, o primeiro número pode ser 1 ou 2, e os dois números seguintes serão os valores de x e y.

Depois ele descreve o que fazer com cada operação: se for 1, faça tais operações, se for 2, faça outras. Ele usa um símbolo estranho (se não me engano é esse: ⨁) para indicar a operação XOR, e descreve em detalhes o algoritmo. Em resumo:

  • criar um array arr de 2 dimensões (no caso do C#, ele usou List, mas a ideia é a mesma). A lista tem n sublistas
  • inicialize lastAnswer com zero
  • se a query for 1:
    • faça idx ser igual a (x ^ lastAnswer) % n
    • adicione y na lista que está na posição idx do array arr
  • se a query for 2:
    • faça idx ser igual a (x ^ lastAnswer) % n
    • faça lastAnswer ser igual a arr[idx][y % arr[idx].Count]
    • adicione lastAnswer no array de respostas (que é o que o método dynamicArray vai retornar no final)

Traduzindo para código, ficaria assim:

public static List<int> dynamicArray(int n, List<List<int>> queries)
{
    List<List<int>> arr = Enumerable.Range(0, n).Select(i => new List<int>()).ToList();
    List<int> answers = new List<int>();
    int lastAnswer = 0;
    foreach (var q in queries)
    {
        var x = q[1];
        var y = q[2];
        if (q[0] == 1)
        {
            arr[(x ^ lastAnswer) % n].Add(y);
        }
        else if (q[0] == 2)
        {
            var idx = (x ^ lastAnswer) % n;
            lastAnswer = arr[idx][y % arr[idx].Count];
            answers.Add(lastAnswer);
        }
    }
    return answers;
}

Acabei de mandar lá e passou.

1