【leetcode729:我的日程安排表】
生活随笔
收集整理的這篇文章主要介紹了
【leetcode729:我的日程安排表】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:
實(shí)現(xiàn)一個(gè) MyCalendar 類來存放你的日程安排。如果要添加的日程安排不會(huì)造成 重復(fù)預(yù)訂 ,則可以存儲(chǔ)這個(gè)新的日程安排。
當(dāng)兩個(gè)日程安排有一些時(shí)間上的交叉時(shí)(例如兩個(gè)日程安排都在同一時(shí)間內(nèi)),就會(huì)產(chǎn)生 重復(fù)預(yù)訂 。
日程可以用一對(duì)整數(shù) start 和 end 表示,這里的時(shí)間是半開區(qū)間,即 [start, end), 實(shí)數(shù) x 的范圍為, start <= x < end 。
實(shí)現(xiàn) MyCalendar 類:
MyCalendar() 初始化日歷對(duì)象。
boolean book(int start, int end) 如果可以將日程安排成功添加到日歷中而不會(huì)導(dǎo)致重復(fù)預(yù)訂,返回 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 ,這個(gè)日程安排不能添加到日歷中,因?yàn)闀r(shí)間 15 已經(jīng)被另一個(gè)日程安排預(yù)訂了。 myCalendar.book(20, 30); // return True ,這個(gè)日程安排可以添加到日歷中,因?yàn)榈谝粋€(gè)日程安排預(yù)訂的每個(gè)時(shí)間都小于 20 ,且不包含時(shí)間 20 。 ## 解題思路 因?yàn)樾枰志没八械念A(yù)定,所以考慮使用一個(gè)鏈表保存所有的預(yù)定時(shí)間 后續(xù)添加時(shí)比對(duì),所以類里只需要一個(gè)鏈表。java代碼:
// An highlighted block class MyCalendar {//鏈表里保存所有預(yù)定的起止時(shí)間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運(yùn)行截圖:
可以看出,兩種語言執(zhí)行用時(shí)有較大差距。
總結(jié)
以上是生活随笔為你收集整理的【leetcode729:我的日程安排表】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 水桶传递队列
- 下一篇: 【分享】找回word文档保护密码