3097. Sous-tableau le plus court avec OU au moins K II
Difficulté :Moyen
Sujets : Tableau, manipulation de bits, fenêtre coulissante
Vous recevez un tableau numérique d'entiers non négatifs et un entier k.
Un tableau est dit spécial si le OU au niveau du bit de tous ses éléments est au moins k.
Renvoie la longueur du sous-tableau spécial non vide le plus court1 de nombres, ou renvoie -1 s'il n'existe aucun sous-tableau spécial.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Indice :
Solution :
Nous pouvons utiliser une approche de fenêtre glissante combinée à une manipulation de bits pour garder une trace du OU des éléments dans la fenêtre.
Implémentons cette solution en PHP : 3097. Sous-tableau le plus court avec OU au moins K II
minimumSubarrayLength($nums1, $k1) . "\n"; // Output: 1 $nums2 = [2, 1, 8]; $k2 = 10; echo $solution->minimumSubarrayLength($nums2, $k2) . "\n"; // Output: 3 $nums3 = [1, 2]; $k3 = 0; echo $solution->minimumSubarrayLength($nums3, $k3) . "\n"; // Output: 1 ?>Explication:
Méthode minimumSubarrayLength :
- Initialiser et à une valeur élevée impossible ($n 1).
- Utilisez deux pointeurs l (gauche) et r (droite) pour agrandir et réduire la fenêtre.
- Calculez le OU du sous-tableau lorsque vous agrandissez la fenêtre avec orNum et réduisez-la avec undoOrNum lors de la réduction.
- Chaque fois que le résultat OR atteint ou dépasse k, vérifiez si la taille actuelle de la fenêtre est inférieure à ans.
Méthodes orNum et undoOrNum :
- Méthode orNum : ajoute des bits au OU cumulatif en mettant à jour le tableau de comptage. Si un bit est nouvellement défini dans la fenêtre (ce qui signifie que count[i] devient 1), ce bit est ajouté à ors.
- Méthode undoOrNum : supprime les bits du OU cumulatif lorsque vous faites glisser la fenêtre vers la gauche. Si un bit n'est plus défini dans aucun des nombres de la fenêtre (ce qui signifie que count[i] devient 0), ce bit est supprimé de ors.
Complexité temporelle :
- La complexité temporelle est O(n) car chaque index est ajouté et supprimé du deque au plus une fois.
- n est la longueur du tableau d'entrée.
4*Complexité temporelle* :
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 :
Sous-tableau : Un sous-tableau est une séquence contiguë non vide d'éléments au sein d'un tableau. ↩
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!