Maison > interface Web > js tutoriel > Méditations LeetCode : intervalles sans chevauchement

Méditations LeetCode : intervalles sans chevauchement

Linda Hamilton
Libérer: 2024-12-26 18:17:16
original
655 Les gens l'ont consulté

LeetCode Meditations: Non-overlapping Intervals

La description des intervalles sans chevauchement est :

Étant donné un tableau d'intervalles intervalles où intervalles[i] = [start_i, end_i], renvoie le nombre minimum d'intervalles que vous devez supprimer pour que le reste des intervalles ne se chevauchent pas.

Notez que les intervalles qui ne se touchent qu'en un point sont ne se chevauchent pas. Par exemple, [1, 2] et [2, 3] ne se chevauchent pas.

Par exemple :

Input: intervals = [[1, 2], [2, 3], [3, 4], [1, 3]]
Output: 1

Explanation: [1, 3] can be removed and the rest of the intervals are non-overlapping.
Copier après la connexion
Copier après la connexion

Ou :

Input: intervals = [[1, 2], [1, 2], [1, 2]]
Output: 2

Explanation: You need to remove two [1, 2] to make the rest of the intervals non-overlapping.
Copier après la connexion
Copier après la connexion

Ou :

Input: intervals = [[1, 2], [2, 3]]
Output: 0

Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
Copier après la connexion
Copier après la connexion

Pour ce problème, NeetCode propose une excellente solution qui commence par trier les intervalles, comme nous l'avons fait dans le problème précédent.
Nous pouvons également initialiser une variable pour suivre le nombre de suppressions.

intervals.sort((a, b) => a[0] - b[0]);

let numRemovals = 0;
Copier après la connexion

Maintenant que nos intervalles sont triés, nous allons les parcourir chacun, en vérifiant s'ils se chevauchent ou non. Nous garderons une trace de la fin de l'intervalle précédent pour cela, initialisons donc une variable prevEnd qui contient initialement la fin du premier intervalle :

let prevEnd = intervals[0][1];
Copier après la connexion
Remarque ête> Pour que deux intervalles
Note
For two intervals not to overlap, the start of one should be strictly larger than the end of the other or the end of the one should be strictly smaller than the start of the other, as mentioned in our chapter introduction.
ne se chevauchent, le début de l'un doit être strictement plus grand que la fin du autre ou la fin de celui-ci doit être strictement plus petit que le début de l'autre, comme mentionné dans l'introduction de notre chapitre.

Dans ce problème, lorsque la fin d'un intervalle est égale au début de l'autre, elles sont considérées comme ne se chevauchant pas.

On peut donc dire ici que deux intervalles se chevaucheront si le début de l'un est strictement inférieur à la fin de l'autre. Dans ce cas, nous mettrons à jour prevEnd pour qu'il soit la plus petite valeur des deux extrémités afin d'avoir moins de chances de chevaucher l'intervalle suivant. Sinon, on continue comme avant :

Input: intervals = [[1, 2], [2, 3], [3, 4], [1, 3]]
Output: 1

Explanation: [1, 3] can be removed and the rest of the intervals are non-overlapping.
Copier après la connexion
Copier après la connexion

Enfin, nous pouvons renvoyer numRemovals :

Input: intervals = [[1, 2], [1, 2], [1, 2]]
Output: 2

Explanation: You need to remove two [1, 2] to make the rest of the intervals non-overlapping.
Copier après la connexion
Copier après la connexion

Et la solution finale que nous avons ressemble à ceci :

Input: intervals = [[1, 2], [2, 3]]
Output: 0

Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
Copier après la connexion
Copier après la connexion

Complexité temporelle et spatiale

Puisque nous trions les intervalles au début, la complexité temporelle sera O(n log n)O(n log n) O(n log n) . Nous n'avons pas de structure de données supplémentaire dont la taille augmentera à mesure que la taille d'entrée augmente, donc la complexité spatiale est O(1)O(1) O(1) .


Ensuite, nous commencerons le dernier chapitre de la série, Bit Manipulation. En attendant, bon codage.

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!

source:dev.to
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