Maison > interface Web > js tutoriel > Programme JavaScript permettant d'interroger la somme maximale de sous-tableaux consécutifs d'une longueur donnée dans un tableau pivoté

Programme JavaScript permettant d'interroger la somme maximale de sous-tableaux consécutifs d'une longueur donnée dans un tableau pivoté

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-09-03 22:41:13
avant
798 Les gens l'ont consulté

用于查询的 JavaScript 程序,用于查找旋转数组中给定长度的连续子数组的最大总和

La rotation d'un tableau signifie que nous obtiendrons un nombre et que nous devrons déplacer les éléments du tableau vers la droite ou la gauche dans un ordre circulaire. Ici, nous ne précisons pas, nous utiliserons donc la rotation à droite comme critère, et après le nombre de rotations donné, nous renverrons le sous-tableau avec la plus grande somme. Nous verrons le code avec une explication correcte dans l'article.

Introduction au problème

Dans ce problème, nous obtenons un tableau contenant des entiers et un autre tableau contenant des paires de requêtes. Chaque index du tableau de requête contient deux entiers, le premier entier représente le nombre de rotations du tableau actuel et le deuxième entier représente la longueur du sous-tableau souhaité. Par exemple -

Si le tableau donné est [5, 7, 1, 4, 3, 8, 2] et que la requête est la suivante -

Queries: 3 rotations and size 3
After the three rotations, the array looks like: 3, 8, 2, 5, 7, 1, 4
From the above array, the result is 15 by subarray: 8, 2, and 5.
Queries: 2 rotations and size 4
After the two rotations, the array looks like: 8, 2, 5, 7, 1, 4, 3
From the above array, the result is 22 by subarrays 8, 2, 5, and 7
Copier après la connexion

Passons aux solutions à ce problème

Méthode naïve

Le moyen le plus simple est d'utiliser directement deux boucles for pour implémenter le problème donné. Tout d’abord, nous allons nous déplacer sur le tableau et le faire pivoter dans le sens des aiguilles d’une montre un nombre de fois spécifié. Ensuite, nous trouvons les sous-tableaux d'une taille donnée et le sous-tableau avec la plus grande somme. Voyons son code -

Exemple

// function to rotate the array and find the subarray sum
function subSum(arr, rotations, size){
   var n = arr.length 
   var temp = new Array(n)
   var j = 0;
   for(var i = n-rotations; i<n;i++){
      temp[j] = arr[i];
      j++;
   }
   for(var i = 0; i < n-rotations; i++){
      temp[j] = arr[i];
      j++;
   }
   
   // getting the size of the first window of the given size 
   var ans = -1000000000;
   for(var i = 0; i<=n-size; i++) {
      var cur = 0;
      for(var j = i; j < i+size; j++) {
         cur += temp[j];
      }
      if(ans < cur) {
         ans = cur;
      }
   }
   console.log("The maximum sum or given subarray with size " + size + " after " + rotations + " number of rotations is " + ans);
}

// defining array 
var arr= [5, 7, 1, 4, 3, 8, 2]

// defining quries 
var queries = [[3,3], [2,4]]

// traversing over the array 
for(var i =0; i<queries.length; i++){
   subSum(arr, queries[i][0], queries[i][1]);
}
Copier après la connexion

Complexité temporelle et spatiale

La complexité temporelle du code ci-dessus est O(Q*D*N), où Q est le nombre de requêtes. D est la taille de chaque sous-tableau souhaité et N est la longueur du tableau.

La complexité spatiale du code ci-dessus est O(N) car nous utilisons un tableau supplémentaire pour stocker le tableau pivoté.

Méthode efficace

L'utilisation de la méthode de la fenêtre coulissante peut résoudre efficacement ce problème. Passons directement au code de cette question et obtenons-en un aperçu -

Exemple

// function to rotate the array and find the subarray sum
function subSum(arr, rotations, size){
   var n = arr.length 
   var temp = new Array(n)
   var j = 0;
   for(var i = n-rotations; i<n;i++){
      temp[j] = arr[i];
      j++;
   }
   for(var i = 0; i < n-rotations; i++){
      temp[j] = arr[i];
      j++;
   }
   
   // getting the size of the first window of the given size 
   var ans = -1000000000
   var cur = 0;
   for(var i = 0;i<size;i++){
      cur += temp[i];
   }
   ans = cur;
   for(var i = size; i<n;i++){
      cur -= temp[i-size];
      cur += temp[i];
      if(ans < cur) {
         ans = cur;
      }
   }
   console.log("The maximum sum of given subarray with size " + size + " after " + rotations + " number of rotations is " + ans);
}

// defining array 
var arr= [5, 7, 1, 4, 3, 8, 2]

// defining quries 
var queries = [[3,3], [2,4]]

// traversing over the array 
for(var i =0; i<queries.length; i++){
   subSum(arr, queries[i][0], queries[i][1]);
}
Copier après la connexion

Complexité temporelle et spatiale

La complexité temporelle du code ci-dessus est O(Q*N), où Q est le nombre de requêtes et N est la longueur du tableau.

La complexité spatiale du code ci-dessus est O(N) car nous utilisons un tableau supplémentaire pour stocker le tableau pivoté.

Conclusion

Dans ce tutoriel, nous avons implémenté un programme JavaScript permettant d'interroger afin de trouver la somme maximale de sous-tableaux consécutifs d'une longueur donnée dans un tableau pivoté. Nous avons implémenté une méthode naïve avec une complexité temporelle O(N*Q*D), puis l'avons améliorée en complexité temporelle O(N*Q) en utilisant le concept de fenêtres glissantes, mais la complexité spatiale des deux codes est identique à O(N) .

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