862. Sous-tableau le plus court avec une somme d'au moins K
Difficulté : Difficile
Sujets : Tableau, recherche binaire, file d'attente, fenêtre coulissante, tas (file d'attente prioritaire), somme de préfixes, file d'attente monotone
Étant donné un tableau entier nums et un entier k, renvoie la longueur du sous-tableau non vide le plus court de nums avec une somme d'au moins k. S'il n'existe pas un tel sous-tableau, retournez -1.
Un sous-tableau est une partie contiguë d'un tableau.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Solution :
Nous devons utiliser une approche de fenêtre glissante combinée à des sommes de préfixes et une file d'attente monotone. Voici l'approche étape par étape :
Somme du préfixe :
File d'attente monotone :
Logique de fenêtre coulissante :
Implémentons cette solution en PHP : 862. Sous-tableau le plus court avec une somme d'au moins K
Explication:
Tableau de somme de préfixes :
- Nous calculons la somme cumulée du tableau dans le tableau prefix_sum. Cela aide à calculer la somme de tous les nombres de sous-tableaux[i...j] en utilisant la formule prefix_sum[j 1] - prefix_sum[i].
File d'attente monotone :
- Le deque contient les indices du tableau prefix_sum par ordre croissant de valeurs. Nous maintenons cet ordre afin de pouvoir trouver efficacement le plus petit sous-tableau dont la somme est supérieure ou égale à k.
Logique de fenêtre coulissante :
- Lorsque nous parcourons le tableau prefix_sum, nous essayons de trouver le plus petit sous-tableau en utilisant la différence entre le prefix_sum[i] actuel et le prefix_sum[deque[0]] précédent.
- Si la différence est supérieure ou égale à k, nous calculons la longueur du sous-tableau et mettons à jour la longueur minimale trouvée.
Résultat de retour :
- Si aucun sous-tableau valide n'est trouvé, renvoyez -1. Sinon, renvoie la longueur minimale du sous-tableau.
Complexité temporelle :
Cette approche garantit que la solution fonctionne efficacement, même pour des intrants importants.
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 :
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!