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

Désamorcer la bombe

Barbara Streisand
Libérer: 2024-11-24 16:19:32
original
550 Les gens l'ont consulté

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

<!--?php

/**

 * @param Integer[] $code

 * @param Integer $k

 * @return Integer[]

 */

function decrypt($code, $k) {

    ...

    ...

    ...

    /**

     * go to ./solution.php

     */

}

 

// Example Usage

$code1 = [5, 7, 1, 4];

$k1 = 3;

print_r(decrypt($code1, $k1)); // Output: [12, 10, 16, 13]

 

$code2 = [1, 2, 3, 4];

$k2 = 0;

print_r(decrypt($code2, $k2)); // Output: [0, 0, 0, 0]

 

$code3 = [2, 4, 9, 3];

$k3 = -2;

print_r(decrypt($code3, $k3)); // Output: [12, 5, 6, 13]

?-->

 

 

 

 

<h3>

   

   

  Explication:

</h3>

 

<ol>

<li>

<p><strong>Initialisation</strong> :</p>

 

<ul>

<li>Nous créons un tableau de résultats initialisé avec des zéros en utilisant array_fill.</li>

</ul>

</li>

<li>

<p><strong>Gestion k == 0</strong>:</p>

 

<ul>

<li>Si k vaut zéro, le tableau de sortie est simplement rempli de zéros, comme l'exige le problème.</li>

</ul>

</li>

<li>

<p><strong>Itération à travers le tableau</strong> :</p>

 

<ul>

<li>Pour chaque index i du tableau :

 

<ul>

<li>Si k> 0, additionnez les k éléments suivants en utilisant l'arithmétique modulo pour envelopper.</li>

<li>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.</li>

</ul>

</li>

</ul>

</li>

<li>

<p><strong>Modulo Arithmétique</strong> :</p>

 

<ul>

<li>Nous utilisons ($i $j) % $n pour revenir au début du tableau lors de l'accès à des indices supérieurs à n - 1.</li>

<li>De même, ($i - $j $n) % $n gère le retour à la ligne pour les indices négatifs.</li>

</ul>

</li>

<li>

<p><strong>Complexité</strong> :</p>

 

<ul>

<li>Complexité temporelle : <em><strong>O(n . |k|)</strong></em>, où <em><strong>n</strong></em> est la taille du tableau et <em><strong>|k|</strong></em> est la valeur absolue de <em><strong>k</strong></em>.</li>

<li>Complexité spatiale : <em><strong>O(n)</strong></em> pour le tableau de résultats.</li>

</ul>

</li>

</ol>

 

<h3>

   

   

  Sorties :

</h3>

 

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

 

<p><strong>Liens de contact</strong></p>

 

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

 

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

 

<ul>

<li><strong>LinkedIn</strong></li>

<li><strong>GitHub</strong></li>

</ul>

 

 

           

 

             

         

<p>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!</p>

Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal