当前位置: 首页 > article >正文

leetcode 729. 我的日程安排表 I 中等

实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。

当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。

日程可以用一对整数 startTime 和 endTime 表示,这里的时间是半开区间,即 [startTime, endTime), 实数 x 的范围为,  startTime <= x < endTime 。

实现 MyCalendar 类:

  • MyCalendar() 初始化日历对象。
  • boolean book(int startTime, int endTime) 如果可以将日程安排成功添加到日历中而不会导致重复预订,返回 true 。否则,返回 false 并且不要将该日程安排添加到日历中。

示例:

输入:
["MyCalendar", "book", "book", "book"]
[[], [10, 20], [15, 25], [20, 30]]
输出:
[null, true, false, true]

解释:
MyCalendar myCalendar = new MyCalendar();
myCalendar.book(10, 20); // return True
myCalendar.book(15, 25); // return False ,这个日程安排不能添加到日历中,因为时间 15 已经被另一个日程安排预订了。
myCalendar.book(20, 30); // return True ,这个日程安排可以添加到日历中,因为第一个日程安排预订的每个时间都小于 20 ,且不包含时间 20 。

提示:

  • 0 <= start < end <= 10^9
  • 每个测试用例,调用 book 方法的次数最多不超过 1000 次。

分析:由于调用book方法的总数不超过1000次,所以可以用枚举的方法。每次调用book方法,检查之前所有的日程是否有冲突,如果没有冲突就添加到日历当中去,有冲突则不添加。当然正常的方法应该是线段树。

typedef struct {
    int cnt;
    int *startTime;
    int *endTime;
} MyCalendar;


MyCalendar* myCalendarCreate() {
    MyCalendar *my=(MyCalendar*)malloc(sizeof(MyCalendar));
    my->cnt=0;
    my->startTime=(int*)malloc(sizeof(int)*1010);
    my->endTime=(int*)malloc(sizeof(int)*1010);
    return my;
}

bool myCalendarBook(MyCalendar* obj, int startTime, int endTime) {
    int len=obj->cnt;
    int f=1;
    for(int i=0;i<len;++i)
    {
        if(startTime>=obj->startTime[i]&&startTime<obj->endTime[i])f=0;
        if(endTime>obj->startTime[i]&&endTime<=obj->endTime[i])f=0;
        if(startTime<obj->endTime[i]&&endTime>obj->startTime[i])f=0;
        if(f==0)break;
    }
    if(f)
    {
        obj->startTime[len]=startTime,obj->endTime[len]=endTime,obj->cnt++;
        return true;
    }
    return false;
}

void myCalendarFree(MyCalendar* obj) {
    free(obj->startTime);
    free(obj->endTime);
    free(obj);
    return;
}

/**
 * Your MyCalendar struct will be instantiated and called as such:
 * MyCalendar* obj = myCalendarCreate();
 * bool param_1 = myCalendarBook(obj, startTime, endTime);
 
 * myCalendarFree(obj);
*/


http://www.kler.cn/a/464183.html

相关文章:

  • 【数据仓库】hadoop web UI 增加账号密码认证
  • seata分布式事务详解(AT)
  • Kafka配置公网或NLB访问(TCP代理)
  • 【书籍连载】《软件测试架构实践与精准测试》| 有关软件测试模型的调查结果
  • Python 链接 Pcomm
  • 【网络】什么是路由协议(Routing Protocols)?常见的路由协议包括RIP、OSPF、EIGRP和BGP
  • 小程序配置文件 —— 15 页面配置
  • 【2024美国数学建模AB题原文翻译】
  • 基于QT(C++)实现的坦克大战
  • 力扣刷题:栈和队列OJ篇(下)
  • 力扣-数据结构-10【算法学习day.81】
  • 浅谈Beam Search
  • “混合双打”二维数组展平的有效方案(Python)
  • 【SqlSugar雪花ID常见问题】.NET开源ORM框架 SqlSugar 系列
  • requests请求带cookie
  • 深入理解Java Map集合
  • 逻辑回归(Logistic Regression)深度解析
  • 在Swagger(现称为OpenAPI)中各类@api之间的区别
  • k8s系列--docker拉取镜像导入k8s的containerd中
  • HTML——56.表单发送
  • 从零开始学桶排序:Java 示例与优化建议
  • 2025.01.02 一月 | 充分地接受生活本身
  • python中常用的内置函数介绍
  • Java开发工具-Jar命令
  • 面试经典问题 —— 链表之返回倒数第k个节点(经典的双指针问题)
  • RK3568适配美格(MEIG-SLM3XX)4G模块