【leetcode729:我的日程安排表】
生活随笔
收集整理的這篇文章主要介紹了
【leetcode729:我的日程安排表】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
實現一個 MyCalendar 類來存放你的日程安排。如果要添加的日程安排不會造成 重復預訂 ,則可以存儲這個新的日程安排。
當兩個日程安排有一些時間上的交叉時(例如兩個日程安排都在同一時間內),就會產生 重復預訂 。
日程可以用一對整數 start 和 end 表示,這里的時間是半開區間,即 [start, end), 實數 x 的范圍為, start <= x < end 。
實現 MyCalendar 類:
MyCalendar() 初始化日歷對象。
boolean book(int start, int end) 如果可以將日程安排成功添加到日歷中而不會導致重復預訂,返回 true 。否則,返回 false 并且不要將該日程安排添加到日歷中。
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/my-calendar-i
輸入:
["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 。 ## 解題思路 因為需要持久化之前所有的預定,所以考慮使用一個鏈表保存所有的預定時間 后續添加時比對,所以類里只需要一個鏈表。java代碼:
// An highlighted block class MyCalendar {//鏈表里保存所有預定的起止時間List<Integer[]> calender;public MyCalendar() {calender=new ArrayList<>();}public boolean book(int start, int end) {for(int i=0;i<calender.size();i++){Integer[] arr=calender.get(i);int left = arr[0];int right= arr[1];//一端在里一端在外 || 包含 返回falseif(start>=left&&start<right){return false;}if(end>left&&end<=right){return false;}if(start<=left&&end>=right){return false;}}calender.add(new Integer[]{start,end});return true;} }python代碼
class MyCalendar(object):def __init__(self):self.calender = []def book(self, start, end):""":type start: int:type end: int:rtype: bool"""i = 0while i<len(self.calender):arr = self.calender[i]left = arr[0];right= arr[1];if start>=left and start<right:return Falseif end>left and end<=right:return Falseif start<=left and end>=right:return Falsei+=1self.calender.append([start,end])return True運行截圖:
可以看出,兩種語言執行用時有較大差距。
總結
以上是生活随笔為你收集整理的【leetcode729:我的日程安排表】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 水桶传递队列
- 下一篇: 【分享】找回word文档保护密码