当前位置:网站首页>Déduisez la question d'aujourd'hui - 729. Mon emploi du temps I
Déduisez la question d'aujourd'hui - 729. Mon emploi du temps I
2022-07-06 02:26:00 【Un jeune combattant】
729. Mon emploi du temps I
Deux points
- Triez d'abord toutes les séquences déjà programmées,Puis traversez l'intervalle à tour de rôle,Regarde dans une section.
left1
,Est - ce plus grand queend
12Et3,5,10Comparer,Il n'y a pas d'intervalle plus grand,Il est temps d'envisager d'insérer.
- Non trouvé:C'est avec le dernier
right1
Comparaison,Regardez la dernière sectionright1Est inférieur à la plage d'insertionstart,Si possible, retournez àture,Sinon, retournez àfalse
12Et le dernier élément15Comparer,Découverte15Est supérieur à12De,Retourfalse.
Et17D'abord.3,7,10Comparer,Les résultats sont plus grands qu'eux,Alors, envisagez de placer,Et puis20Et15Comparaison,Découverte20Plus grand que15,Retourtrue.
- J'ai trouvé le premier
I) Jugement ,Je l'ai trouvé.
end
Plus petit que le plus petitleft1
,Pour pouvoir insérer,Je revienstrue
- Insertion au milieu
Intervalle intermédiaire,Trouverlast La section précédente de pre[left2,right2]
,Siright2Plus grand questart, Il y a intersection ,Retourfalse,Sinon, retournez àtrue.
Juge d'abord,Découverte10==10, Arrête de juger 7,Regarde.7<8Avec intersection,Retourfalse.
Par exemple,[9,10] C'est un bon exemple ,Découverte 10 =- 10, Arrête de juger ,Regarde.9> 8,Retourtrue.
- Code:
List<int[]> data;
public MyCalendar() {
data = new ArrayList<>();
}
public boolean book(int start, int end) {
if (data.size() == 0) {
data.add(new int[]{
start, end});
return true;
}
data.sort(Comparator.comparingInt(o -> o[0]));
int left = 0, right = data.size() - 1;
//Trouver le premierstart >= endIntervalle de
int ans = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (data.get(mid)[0] >= end) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
//Je n'ai pas trouvé Comparé au dernier intervalle
if (ans == -1) {
int[] ints = data.get(data.size() - 1);
if (ints[1] > start) {
return false;
}
} else if (ans != 0) {
// Pas la première section , Si c'est le premier intervalle, il peut être inséré directement
int[] pre = data.get(ans - 1);
if (pre[1] > start) {
return false;
}
}
data.add(new int[]{
start, end});
return true;
}
Directement à travers
class MyCalendar {
// Définir unbooked
List<int[]> booked;
public MyCalendar() {
booked = new ArrayList<int[]>();
}
public boolean book(int start, int end) {
for(int[] arr : booked){
int l = arr[0] ,r = arr[1];
//Dans le deuxième cas
if(l < end && start < r){
return false;
}
}
booked.add(new int[]{
start,end});
return true;
}
}
/** * Your MyCalendar object will be instantiated and called as such: * MyCalendar obj = new MyCalendar(); * boolean param_1 = obj.book(start,end); */
[s1,e1)Et[s2,e2)
, Pas d'intersection satisfaisantes1>e2
Ous2>e1
, Inversement, cela signifie que les deux se croisent en arrière .
Pensée 3
Changez d'avis , Le concept de chevauchement peut être étendu au concept général d'égalité , C'est - à - dire qu'une fois superposés, les deux éléments sont égaux , Alors c'est simple ,set Spécialement conçu pour le déstockage . AlorsHashSetEtTreeSetAvec lequel?? Tout d'abord,HashSet La dé - duplication est basée sur la valeur de hachage de l'objet , Parce que ce que nous stockons est int[]Type, Nous écrivons le Code en fonction de startEtendPour le créer, Donc leurs valeurs de hachage sont fondamentalement différentes , Ce qui veut dire que même si deux int[] Les valeurs sont exactement les mêmes , Mais les valeurs de hachage sont différentes ,HashSet Et les mettre dans . Parce que nous considérons le chevauchement comme une égalité au sens large , Il est donc nécessaire de définir un comparateur pour les distinguer de l'égalité généralisée ,EtTreeSet Prise en charge des comparateurs personnalisés , Et trier en fonction des valeurs retournées par le Comparateur , Très bien adapté à nos besoins .
class MyCalendar {
//Définir unTreeSet
TreeSet<int[]> calendars;
public MyCalendar() {
calendars = new TreeSet<>((a, b) -> {
if(a[1] <= b[0])
return -1;
else if(a[0] >= b[1])
return 1;
else
return 0;
});
}
public boolean book(int start, int end) {
int[] e = new int[]{
start, end};
return calendars.add(e);
}
}
/** * Your MyCalendar object will be instantiated and called as such: * MyCalendar obj = new MyCalendar(); * boolean param_1 = obj.book(start,end); */
Développement
TreeSetIntroduction:
Ordre.,Non reproductible,Arbre Rouge et noir,Basé surTreemapRéalisation, Caractéristiques telles que le tri personnalisé .
TreeSet Est une collection ordonnée,Son rôle est d'assurer l'ordreSetEnsemble.Il est hérité deAbstractSetClasse abstraite,C'est fait.NavigableSet, Cloneable, java.io.SerializableInterface.
TreeSet Hérité deAbstractSet,Donc C'est unSetEnsemble,AvecSetPropriétés et méthodes de.
TreeSet C'est fait.NavigableSetInterface,Cela signifie qu'il supporte une gamme de méthodes de navigation.Comme trouver la meilleure correspondance avec la cible spécifiée.
TreeSet C'est fait.CloneableInterface,Ça veut dire qu'il peut être cloné.
TreeSet C'est fait.java.io.SerializableInterface,Cela signifie qu'il supporte la sérialisation.
TreeSetEst basé surTreeMapRéalisé.TreeSetÉléments pris en charge dans2Trier par:Ordre naturel Ou Selon la créationTreeSet Fourni à Comparator Trier.Cela dépend de la méthode de construction utilisée.
TreeSet Pour les opérations de base (add、remove Et contains) Fournir une garantie log(n) Dépenses de temps.
En plus,TreeSetEst asynchrone. C'est...iterator L'Itérateur retourné par la méthode estfail-fastDe
边栏推荐
- Keyword static
- 零基础自学STM32-复习篇2——使用结构体封装GPIO寄存器
- 有沒有sqlcdc監控多張錶 再關聯後 sink到另外一張錶的案例啊?全部在 mysql中操作
- Is there a case where sqlcdc monitors multiple tables and then associates them to sink to another table? All operations in MySQL
- [width first search] Ji Suan Ke: Suan tou Jun goes home (BFS with conditions)
- Initial understanding of pointer variables
- Reset nodejs of the system
- This time, thoroughly understand the deep copy
- Minecraft 1.16.5 biochemical 8 module version 2.0 storybook + more guns
- sql表名作为参数传递
猜你喜欢
爬虫(9) - Scrapy框架(1) | Scrapy 异步网络爬虫框架
LeetCode 103. Binary tree zigzag level order transverse - Binary Tree Series Question 5
2022.02.13
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO
Computer graduation design PHP college student human resources job recruitment network
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
RDD partition rules of spark
Use image components to slide through photo albums and mobile phone photo album pages
好用的 JS 脚本
随机推荐
零基础自学STM32-复习篇2——使用结构体封装GPIO寄存器
Visualstudio2019 compilation configuration lastools-v2.0.0 under win10 system
机器学习训练与参数优化的一般过程 (讨论)
Bigder: I felt good about the 34/100 interview, but I didn't receive the admission
Online reservation system of sports venues based on PHP
I changed the driver to 5.1.35, but it is still the same error. I can succeed even now, but I will report this every time I do an SQL operation
Thinking on Architecture Design (under continuous updating)
2020.02.11
Global and Chinese markets of general purpose centrifuges 2022-2028: Research Report on technology, participants, trends, market size and share
2022 edition illustrated network pdf
我把驱动换成了5.1.35,但是还是一样的错误,我现在是能连成功,但是我每做一次sql操作都会报这个
Minecraft 1.16.5 biochemical 8 module version 2.0 storybook + more guns
零基础自学STM32-野火——GPIO复习篇——使用绝对地址操作GPIO
2022 China eye Expo, Shandong vision prevention and control exhibition, myopia, China myopia correction Exhibition
【机器人库】 awesome-robotics-libraries
有沒有sqlcdc監控多張錶 再關聯後 sink到另外一張錶的案例啊?全部在 mysql中操作
This time, thoroughly understand the deep copy
How to check the lock information in gbase 8C database?
[Wu Enda machine learning] week5 programming assignment EX4 - neural network learning
Prepare for the autumn face-to-face test questions