当前位置:网站首页>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
边栏推荐
- I like Takeshi Kitano's words very much: although it's hard, I will still choose that kind of hot life
- Know MySQL database
- [untitled] a query SQL execution process in the database
- Thinking on Architecture Design (under continuous updating)
- 剑指 Offer 30. 包含min函数的栈
- Audio and video engineer YUV and RGB detailed explanation
- ftp上传文件时出现 550 Permission denied,不是用户权限问题
- Computer graduation design PHP part-time recruitment management system for College Students
- SQL statement
- Initial understanding of pointer variables
猜你喜欢
Black high-end responsive website dream weaving template (adaptive mobile terminal)
PHP campus financial management system for computer graduation design
构建库函数的雏形——参照野火的手册
SQL statement
HttpRunnerManager安装(三)-Linux下配置myql数据库&初始化数据
[solution] every time idea starts, it will build project
0211 embedded C language learning
【MySQL 15】Could not increase number of max_ open_ files to more than 10000 (request: 65535)
Zero basic self-study STM32 wildfire review of GPIO use absolute address to operate GPIO
Virtual machine network, networking settings, interconnection with host computer, network configuration
随机推荐
有没有sqlcdc监控多张表 再关联后 sink到另外一张表的案例啊?全部在 mysql中操作
[postgraduate entrance examination English] prepare for 2023, learn list5 words
高数_向量代数_单位向量_向量与坐标轴的夹角
Initial understanding of pointer variables
在GBase 8c数据库中使用自带工具检查健康状态时,需要注意什么?
Online reservation system of sports venues based on PHP
模板_求排列逆序对_基于归并排序
HttpRunnerManager安装(三)-Linux下配置myql数据库&初始化数据
Virtual machine network, networking settings, interconnection with host computer, network configuration
Black high-end responsive website dream weaving template (adaptive mobile terminal)
Apicloud openframe realizes the transfer and return of parameters to the previous page - basic improvement
MySQL learning notes - subquery exercise
High number_ Vector algebra_ Unit vector_ Angle between vector and coordinate axis
I like Takeshi Kitano's words very much: although it's hard, I will still choose that kind of hot life
Derivation of Biot Savart law in College Physics
Have a look at this generation
How to generate rich text online
Keyword static
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
SQL table name is passed as a parameter