Maison >développement back-end >Tutoriel Python >Ma solution en langage Python pour les tableaux imbriqués de tâches du défi hebdomadaire
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.
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 :
- Le premier élément de set[i] commence par la sélection des éléments ints[i].
- L'élément suivant dans set[i] devrait être ints[ints[i]], puis ints[ints[ints[i]]], et ainsi de suite.
- 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.
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}
Input: @ints = (0, 1, 2) Output: 1
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 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.
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 !
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.
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!