729. 我的日程安排表 I 方法1遍历解的数学思维

本文介绍了一种用于解决日程管理冲突问题的算法实现。通过定义一个列表来存储已预订的时间段,并利用区间比较的方法判断新的预约是否会与已有的预约产生冲突。文章详细展示了如何使用Java实现这一逻辑。

重新开始刷算法题了,
数据结构:

  1. 可以保存每个时间点start 和 end ,然后进行比较
  2. 使用数组保存每个时间点是否已有安排,用01表示(我一开始是这种想法,但是也许不合理)
    可确定数据结构为保存数组的列表List<int[]> booked;
    类构造器booked= new ArrayList<int[]>();

保存了start end 之后,令保存的 为 l 和 r
何时可以添加到日历内呢,感觉这个抽象起来就是数学上区间的问题

[start,end]
        [l,r]

l > end or r < start    => ok
not ok                  => not ( l > end or r < start)
                        =>  l < end and r > start 

逻辑上的意思的图示见下,也就是新添加的日期里包含了已被book的日期

[start, end]
    [l,r]

因此得到代码,即if(start < r && end > l)

class MyCalendar {
    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];
            if(start < r && end > l){
                return false;
            }
        }
        booked.add(new int[]{start,end});
        return true;
    }
}

本题收获由于好久没有自己写java源码了发现Arraylist相关操作都不知道了,本题学到以下操作:
List<int[]> booked; #List的使用
booked= new ArrayList<int[]>();#ArrayList的使用,List的L大写
booked.add(new int[]{start,end}); #匿名数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值