Maison >développement back-end >Tutoriel Python >Ma solution en langage Python pour les tableaux imbriqués de tâches du défi hebdomadaire

Ma solution en langage Python pour les tableaux imbriqués de tâches du défi hebdomadaire

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-28 11:59:10763parcourir

My Python Language Solution to Task Nested Array from The Weekly Challenge

1. Présentation

Le Weekly Challenge, organisé par Mohammad S. Anwar, est une compétition amicale dans laquelle les développeurs s'affrontent en résolvant une paire de tâches. Il encourage la participation des développeurs de toutes langues et de tous niveaux à travers l'apprentissage, le partage et le plaisir.

Tâche 2 : Tableau imbriqué du Weekly Challenge 300 invite les développeurs à trouver la longueur de tableau imbriqué la plus longue.

La date limite du Weekly Challenge 300 est le dimanche 23 décembre 2024 à 23h59 (heure du Royaume-Uni). Pour éviter les préjugés, pensez à lire cet article après la compétition.

2. Tâche 2 : Tableau imbriqué

Vous recevez un tableau d'entiers, @ints de longueur n contenant la permutation des nombres dans la plage [0, n-1].

Écrire un script pour construire un ensemble, set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ... soumis aux règles suivantes :

  1. Le premier élément de set[i] commence par la sélection des éléments ints[i].
  2. L'élément suivant dans set[i] devrait être ints[ints[i]], puis ints[ints[ints[i]]], et ainsi de suite.
  3. Nous arrêtons d'ajouter juste avant qu'un élément en double ne se produise dans set[i].

Renvoie la longueur la plus longue d'un ensemble set[i].

Le défi hebdomadaire 300, tâche 2 : Tableau imbriqué

L'exemple 1 et l'exemple 2 présentent les résultats attendus pour des entrées données.

Exemple 1

Input: @ints = (5, 4, 0, 3, 1, 6, 2)
Output: 4

Ici l'un des ensembles les plus longs est défini[0] :

set[0] = {ints[0], ints[5], ints[6], ints[2]} = {5, 6, 2, 0}

Exemple 2

Input: @ints = (0, 1, 2)
Output: 1

3. Ma solution

def build_set_from_index(ints, starting_index):
    iset = [
            ints[starting_index],
            ]
    for ints_index in range(1, len(ints)):
        pindex = iset[ints_index - 1]
        value = ints[pindex]
        if value in iset:
            break
        iset.append(value)
    return iset

def return_longest_length(ints):
    max_length = 0
    for i in range(0, len(ints)):
        iset = build_set_from_index(ints, i)
        iset_length = len(iset)
        if iset_length > max_length:
            max_length = iset_length
    return max_length

Ma solution utilise deux fonctions build_set_from_index et return_longest_length.

build_set_from_index

build_set_from_index renvoie l'ensemble[starting_index] construit à partir des paramètres ints et Starting_index. J'ai utilisé une approche itérative pour construire set[].

Mon approche est née d'un petit matin et d'une ultérieure paraphrase des règles de construction définies[]. Au départ, ces règles semblaient complexes. Mais après avoir revu l’exemple 1 après un bon petit-déjeuner et de la caféine, j’ai mieux compris ces règles. J'ai également pu formuler la paraphrase suivante.

  • set[i] est un ensemble de k éléments.
    • La règle 3 limite la valeur de k.
    • La règle 3 dicte quand arrêter d'ajouter des éléments à set[i].
  • La valeur de set[i] à k = 0 est égale à ints[i].
  • Pour k> 0, le k-ème élément de set[i] est égal à la valeur de ints[] indexée à l'aide du (k-1)-ème élément de set[i].

En utilisant l'approche paraphrasée, la construction interactive de set[0] à partir de @ints, comme dans l'exemple 1, est devenue encore plus simple !

  • À k = 0, la valeur de set[0] est égale à ints[0] = 5. set[0] contient {5}.
  • À k = 1, la valeur de set[0] est égale à ints[5] = 6. set[0] contient {5, 6}.
  • À k = 2, la valeur de set[0] est égale à ints[6] = 2. set[0] contient {5, 6, 2}.
  • À k = 3, la valeur de set[0] est égale à ints[2] = 0. set[0] contient {5, 6, 2, 0}
  • À k = 4, STOP car set[0] contient ints[0] = 2.

return_longest_length

return_longest_length trouve la longueur maximale de tous les set[] construits à partir d'entiers. Il utilise build_set_from_index pour générer set[k] pour chaque 0 <= k < len(ints) puis identifie l'ensemble[k] avec la longueur la plus longue.

4. Conclusion

Dans cet article, j'ai discuté de la tâche 1 : Nested Array et j'ai présenté ma solution. Ma solution est simple, largement inspirée par la façon dont j'ai paraphrasé la tâche initiale et souligne l'importance d'un bon petit-déjeuner.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn