Maison  >  Article  >  développement back-end  >  Désamorcer la bombe

Désamorcer la bombe

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 16:19:32452parcourir

Defuse the Bomb

1652. Désamorcer la bombe

Difficulté :Facile

Sujets : Tableau, fenêtre coulissante

Vous avez une bombe à désamorcer, et votre temps est compté ! Votre informateur vous fournira un code tableau circulaire de longueur n et une clé k.

Pour décrypter le code, vous devez remplacer chaque numéro. Tous les numéros sont remplacés simultanément.

  • Si k> 0, remplacez le iième nombre par la somme des suivantk nombres.
  • Si k < 0, remplacez le iième nombre par la somme des précédents k nombres.
  • Si k == 0, remplacez le ième nombre par 0.

Comme le code est circulaire, l'élément suivant du code[n-1] est le code[0], et l'élément précédent du code[0] est le code[n-1].

Étant donné le code du tableau circulaire et une clé entière k, renvoyez le code déchiffré pour désamorcer la bombe!

Exemple 1 :

  • Entrée : code = [5,7,1,4], k = 3
  • Sortie : [12,10,16,13]
  • Explication : Chaque nombre est remplacé par la somme des 3 nombres suivants. Le code déchiffré est [7 1 4, 1 4 5, 4 5 7, 5 7 1]. Notez que les chiffres s'enroulent.

Exemple 2 :

  • Entrée : code = [1,2,3,4], k = 0
  • Sortie : [0,0,0,0]
  • Explication : Lorsque k vaut zéro, les nombres sont remplacés par 0.

Exemple 3 :

  • Entrée : code = [2,4,9,3], k = -2
  • Sortie : [12,5,6,13]
  • Explication : Le code déchiffré est [3 9, 2 3, 4 2, 9 4]. Notez que les chiffres s'inversent à nouveau. Si k est négatif, la somme est celle des nombres précédents.

Contraintes :

  • n == code.length
  • 1 <= n <= 100
  • 1 <= code[i] <= 100
  • -(n - 1) <= k <= n - 1

Indice :

  1. Comme le tableau est circulaire, utilisez modulo pour trouver le bon index.
  2. Les contraintes sont suffisamment faibles pour une solution par force brute.

Solution :

Nous pouvons implémenter une fonction qui parcourt le tableau de codes et calcule la somme des nombres appropriés en fonction de la valeur de k.

L'approche générale sera la suivante :

  1. Si k == 0, remplacez tous les éléments par 0.
  2. Si k> 0, remplacez chaque élément par la somme des k éléments suivants dans le tableau circulaire.
  3. Si k < 0, remplacez chaque élément par la somme des k éléments précédents dans le tableau circulaire.

La nature circulaire du tableau signifie que pour les indices qui dépassent les limites du tableau, vous pouvez utiliser modulo (%) pour "enrouler" le tableau.

Implémentons cette solution en PHP : 1652. Désamorcer la bombe






Explication:

  1. Initialisation :

    • Nous créons un tableau de résultats initialisé avec des zéros en utilisant array_fill.
  2. Gestion k == 0:

    • Si k vaut zéro, le tableau de sortie est simplement rempli de zéros, comme l'exige le problème.
  3. Itération à travers le tableau :

    • Pour chaque index i du tableau :
      • Si k> 0, additionnez les k éléments suivants en utilisant l'arithmétique modulo pour envelopper.
      • Si k < 0, additionnez le |k| précédent éléments utilisant l'arithmétique modulo avec un décalage pour gérer les indices négatifs.
  4. Modulo Arithmétique :

    • Nous utilisons ($i $j) % $n pour revenir au début du tableau lors de l'accès à des indices supérieurs à n - 1.
    • De même, ($i - $j $n) % $n gère le retour à la ligne pour les indices négatifs.
  5. Complexité :

    • Complexité temporelle : O(n . |k|), où n est la taille du tableau et |k| est la valeur absolue de k.
    • Complexité spatiale : O(n) pour le tableau de résultats.

Sorties :

Les exemples fournis correspondent aux résultats attendus. Faites-moi savoir si vous avez besoin d'explications supplémentaires ou d'optimisations !

Liens de contact

Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !

Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :

  • LinkedIn
  • GitHub

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