Table des matières
Introduction au problème
Méthode
Exemple
Complexité temporelle et complexité spatiale
Conclusion
Maison interface Web js tutoriel Programme JavaScript pour trouver la somme maximale de i*arr parmi toutes les rotations d'un tableau donné

Programme JavaScript pour trouver la somme maximale de i*arr parmi toutes les rotations d'un tableau donné

Aug 24, 2023 am 11:05 AM

JavaScript 程序求给定数组所有旋转中 i*arr 的最大总和

Dans cet article, nous allons implémenter un programme JavaScript pour trouver la somme maximale de i*arr[i] parmi toutes les rotations d'un tableau donné. Ici, i*arr[i] signifie que nous voulons maximiser la somme de tous les éléments du tableau en les multipliant par l'élément à la position actuelle. Nous pouvons faire pivoter les éléments du tableau donnés vers la gauche ou la droite pour obtenir la réponse maximale. Pour cette question, nous fournirons un code complet et une explication détaillée.

Introduction au problème

Dans cette question, on nous donne un tableau, si nous multiplions tous les éléments par leurs numéros d'index correspondants puis additionnons la somme de tous les éléments, nous obtiendrons un nombre. Avec une rotation, nous pouvons déplacer l'élément le plus à gauche ou le plus à droite vers le côté opposé du tableau, ce qui entraîne un changement de l'index de chaque élément, et nous pouvons faire pivoter le tableau un certain nombre de fois (mais après que le nombre de rotations soit égal à la longueur du tableau, nous obtiendrons le même tableau que le premier), en faisant tourner le tableau nous pouvons changer l'index des éléments et donc la somme de i*arr[i].

Nous allons essayer de maximiser la somme avec deux approches, d'abord, voyons l'exemple −

1

2

3

4

5

6

Given array: 1 3 2 4 2

0th rotation sum: 1*0 + 3*1 + 2*2 + 4*3 + 2*4 = 27

1st rotation sum:  2*0 + 1*1 + 3*2 + 2*3 + 4*4  = 29

2nd rotation sum: 4*0 + 2*1 + 1*2 + 3*3 + 2*4 = 21

3rd rotation sum: 2*0 + 4*1 + 2*2 + 1*3 + 3*4 = 23

4th rotation sum: 3*0 + 2*1 + 4*2 + 2*3 + 1*4 = 20

Copier après la connexion

On voit qu'à la première rotation, on obtient la somme la plus élevée qui est la 29.

Méthode

Il existe deux façons de parvenir à trouver la somme requise, examinons les deux -

La méthode 1 est l'approche naïve, nous trouverons toutes les rotations du tableau en temps O(N), et pour chaque rotation, nous trouverons la somme de tous les éléments en temps O(N) en parcourant le tableau, tandis que utilisez tout espace supplémentaire.

Exemple

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

// function to find the maximum rotation sum

function maxSum(arr){

   var len = arr.length

   var ans = -10000000000 // variable to store the answer

 

   // for loop to find all the rotations of the array

   for(var i = 0; i < len; i++) {

      var cur_sum = 0;

      for(var j = 0; j <len ;j++) {

         cur_sum += j*arr[j];

      }

      if(ans < cur_sum){

         ans = cur_sum;

      }

      var temp = arr[len-1];

      var temp2

      for(var j=0; j<len; j++){

         temp2 = arr[j];

         arr[j] = temp;

         temp = temp2

      }

   }

   console.log("The required maximum sum is: " + ans)

}

 

// defining the array

arr = [1, 3, 2, 4, 2]

maxSum(arr)

Copier après la connexion

Complexité temporelle et complexité spatiale

La complexité temporelle du code ci-dessus est O(N*N) où N est la taille du tableau et la complexité spatiale du code ci-dessus est O(1).

À chaque itération, nous n'avons qu'une différence d'un seul facteur pour le dernier élément uniquement parce que son facteur sera mis à jour à partir de la longueur du tableau - 1 à 0 pour les autres éléments, leur facteur supplémentaire sera ajouté. Nous pouvons donc écrire du code comme. −

Exemple

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

// function to find the maximum rotation sum

function maxSum(arr){

   var len = arr.length

   var ans = -10000000000 // variable to store the answer

    

   // for loop to find all the rotations of the array

   var total_sum = 0;

   for (var i=0; i<len; i++){

      total_sum += arr[i];

   }

   var cur_val = 0;

   for (var i=0; i<len; i++){

      cur_val += i*arr[i];

   }

    

   // Initialize result

   var ans = cur_val;

    

   // Compute values for other iterations

   for (var i=1; i<len; i++) {

      var val = cur_val - (total_sum - arr[i-1]) + arr[i-1] * (len-1);

      cur_val = val;

      if(ans < val) {

         ans = val

      }

   }

   console.log("The required maximum sum is: " + ans)

}

 

// defining the array

arr = [1, 3, 2, 4, 2]

maxSum(arr)

Copier après la connexion

Complexité temporelle et complexité spatiale

La complexité temporelle du code ci-dessus est O(N), où N est la taille du tableau et la complexité spatiale du code ci-dessus est O(1). Cette approche est bien meilleure que la précédente.

.

Conclusion

Dans ce tutoriel, nous avons implémenté un programme JavaScript pour trouver la somme maximale de i*arr[i] parmi toutes les rotations d'un tableau donné. Nous avons vu deux méthodes, l'une consiste à trouver toutes les rotations d'un tableau donné, puis à comparer les résultats de leurs expressions i*arr[i]. Dans la deuxième méthode, nous réduisons la complexité temporelle de O(N*N) à O(N) en utilisant des méthodes mathématiques.

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 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

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Remplacer les caractères de chaîne en javascript

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Tutoriel de configuration de l'API de recherche Google personnalisé

Exemple Couleurs Fichier JSON Exemple Couleurs Fichier JSON Mar 03, 2025 am 12:35 AM

Exemple Couleurs Fichier JSON

Créez vos propres applications Web Ajax Créez vos propres applications Web Ajax Mar 09, 2025 am 12:11 AM

Créez vos propres applications Web Ajax

8 Superbes plugins de mise en page JQuery Page 8 Superbes plugins de mise en page JQuery Page Mar 06, 2025 am 12:48 AM

8 Superbes plugins de mise en page JQuery Page

Qu'est-ce que & # x27; ceci & # x27; en javascript? Qu'est-ce que & # x27; ceci & # x27; en javascript? Mar 04, 2025 am 01:15 AM

Qu'est-ce que & # x27; ceci & # x27; en javascript?

Améliorez vos connaissances jQuery avec le spectateur source Améliorez vos connaissances jQuery avec le spectateur source Mar 05, 2025 am 12:54 AM

Améliorez vos connaissances jQuery avec le spectateur source

10 feuilles de triche mobiles pour le développement mobile 10 feuilles de triche mobiles pour le développement mobile Mar 05, 2025 am 12:43 AM

10 feuilles de triche mobiles pour le développement mobile

See all articles