Leetcode打卡:我的日程安排表II

執行結果:通過

題目 731 我的日程安排表II

實現一個程序來存放你的日程安排。如果要添加的時間內不會導致三重預訂時,則可以存儲這個新的日程安排。

當三個日程安排有一些時間上的交叉時(例如三個日程安排都在同一時間內),就會產生?三重預訂

事件能夠用一對整數?startTime?和?endTime?表示,在一個半開區間的時間?[startTime, endTime)?上預定。實數?x?的范圍為??startTime <= x < endTime

實現?MyCalendarTwo?類:

  • MyCalendarTwo()?初始化日歷對象。
  • boolean book(int startTime, int endTime)?如果可以將日程安排成功添加到日歷中而不會導致三重預訂,返回?true。否則,返回?false?并且不要將該日程安排添加到日歷中。

示例 1:

輸入:
["MyCalendarTwo", "book", "book", "book", "book", "book", "book"]
[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
輸出:
[null, true, true, true, false, true, true]解釋:
MyCalendarTwo myCalendarTwo = new MyCalendarTwo();
myCalendarTwo.book(10, 20); // 返回 True,能夠預定該日程。
myCalendarTwo.book(50, 60); // 返回 True,能夠預定該日程。
myCalendarTwo.book(10, 40); // 返回 True,該日程能夠被重復預定。
myCalendarTwo.book(5, 15);  // 返回 False,該日程導致了三重預定,所以不能預定。
myCalendarTwo.book(5, 10); // 返回 True,能夠預定該日程,因為它不使用已經雙重預訂的時間 10。
myCalendarTwo.book(25, 55); // 返回 True,能夠預定該日程,因為時間段 [25, 40) 將被第三個日程重復預定,時間段 [40, 50) 將被單獨預定,而時間段 [50, 55) 將被第二個日程重復預定。

提示:

  • 0 <= start < end <= 109
  • 最多調用?book?1000 次。

代碼以及解題思路

代碼

from sortedcontainers import SortedDict
class MyCalendarTwo:def __init__(self):self.sd = SortedDict()def book(self, startTime: int, endTime: int) -> bool:self.sd[startTime] = self.sd.get(startTime, 0) + 1self.sd[endTime] = self.sd.get(endTime, 0) - 1s = 0for v in self.sd.values():s += vif s > 2:self.sd[startTime] -= 1self.sd[endTime] += 1return Falsereturn True

解題思路:

. 初始化?SortedDict

  • 在?MyCalendarTwo?類的構造函數?__init__?中,創建了一個?SortedDict?實例?self.sdSortedDict?是一個自動保持鍵排序的字典,非常適合于按時間順序處理鍵值對。

2.?book?方法

  • book?方法接受兩個參數?startTime?和?endTime,分別表示新的會議的開始時間和結束時間。
  • 方法的目的是檢查并嘗試預訂這個新的會議時間段,如果在任何時間點上同時進行的會議數不超過 2 個,則返回?True,否則返回?False

3. 處理會議的開始和結束

  • 對于新的會議時間段,我們在?SortedDict?中記錄它的開始和結束。
    • 使用?self.sd[startTime] = self.sd.get(startTime, 0) + 1?增加?startTime?處的計數,表示一個新的會議開始。
    • 使用?self.sd[endTime] = self.sd.get(endTime, 0) - 1?減少?endTime?處的計數,表示一個會議結束。
  • 這樣,通過遍歷?SortedDict?的值,我們可以計算出任意時間點上的會議數量。

4. 遍歷并檢查會議重疊

  • 初始化一個變量?s?為 0,用于跟蹤當前時間點的會議數量。
  • 遍歷?SortedDict?的值(這些值代表會議的開始和結束事件導致的計數變化),逐步更新?s
    • 每當遇到一個開始事件(正數),將?s?增加相應的值。
    • 每當遇到一個結束事件(負數),將?s?減少相應的值。
  • 在遍歷過程中,如果?s?的值在任何時間點超過了 2,表示此時有三個或更多的會議同時進行,因此不能添加新的會議時間段。
    • 如果發生這種情況,我們需要回滾對?SortedDict?的修改(即減少?startTime?的計數并增加?endTime?的計數),然后返回?False

5. 返回結果

  • 如果遍歷結束后沒有超過 2 個會議同時進行的情況,則新的會議時間段可以被成功預訂,返回?True

總結

通過巧妙地使用?SortedDict?來記錄會議的開始和結束,并實時跟蹤任意時間點上的會議數量,這個算法高效地解決了檢查會議時間段是否可以添加的問題。這種方法避免了直接檢查所有可能的時間重疊,從而大大提高了效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64972.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實現一個通用的樹形結構構建工具

文章目錄 1. 前言2. 樹結構3. 具體實現邏輯3.1 TreeNode3.2 TreeUtils3.3 例子 4. 小結 1. 前言 樹結構的生成在項目中應該都比較常見&#xff0c;比如部門結構樹的生成&#xff0c;目錄結構樹的生成&#xff0c;但是大家有沒有想過&#xff0c;如果在一個項目中有多個樹結構&…

day30-awk進階

awk模式種類 awk的模式分為這幾種 正則表達式 基本正則擴展正則比較表達式范圍表達式特殊模式 BEGINEND awk比較運算符&#xff08;語法&#xff09; 關系運算符解釋示例<小于x<y<小于等于x<y等于xy!不等于x!y>大于等于x>y>大于x>y~匹配正則x~/正則…

大語言模型(LLM)一般訓練過程

大語言模型(LLM)一般訓練過程 數據收集與預處理 收集:從多種來源收集海量文本數據,如互聯網的新聞文章、博客、論壇,以及書籍、學術論文、社交媒體等,以涵蓋豐富的語言表達和知識領域。例如,訓練一個通用型的LLM時,可能會收集數十億甚至上百億字的文本數據.清洗:去除…

數據庫新建用戶后(Host:%),報錯:localhost無法連接

存在問題 在給數據庫&#xff08;MySQL、MariaDB等&#xff09;創建了新的用戶名&#xff08;eg&#xff1a;maxscale&#xff09;后&#xff0c;無法使用新用戶名登錄&#xff0c;并報如下錯誤&#xff1a;ERROR 1045 (28000): Access denied for user maxscalelocalhost (us…

2024年大型語言模型(LLMs)的發展回顧

2024年對大型語言模型&#xff08;LLMs&#xff09;來說是充滿變革的一年。以下是對過去一年中LLMs領域的關鍵進展和主題的總結。 GPT-4的壁壘被打破 去年&#xff0c;我們還在討論如何構建超越GPT-4的模型。如今&#xff0c;已有18個組織擁有在Chatbot Arena排行榜上超越原…

數據挖掘——支持向量機分類器

數據挖掘——支持向量機分類器 支持向量機最小間隔面推導基于軟間隔的C-SVM非線性SVM與核變換常用核函數 支持向量機 根據統計學習理論&#xff0c;學習機器的實際風險由經驗風險值和置信范圍值兩部分組成。而基于經驗風險最小化準則的學習方法只強調了訓練樣本的經驗風險最小…

檢索增強生成

概述 檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;是一種將信息檢索與語言模型相結合的技術。由Facebook AI Research于2020年提出&#xff0c;它把數據庫的優勢與語言模型的優勢相結合。它能讓模型從外部知識庫中檢索信息&#xff0c…

在 SQL 中,區分 聚合列 和 非聚合列(nonaggregated column)

文章目錄 1. 什么是聚合列&#xff1f;2. 什么是非聚合列&#xff1f;3. 在 GROUP BY 查詢中的非聚合列問題示例解決方案 4. 為什么 only_full_group_by 要求非聚合列出現在 GROUP BY 中&#xff1f;5. 如何判斷一個列是聚合列還是非聚合列&#xff1f;6. 總結 在 SQL 中&#…

ETL處理工具Kettle入門

1. Kettle簡介 Kettle&#xff08;現已更名為Pentaho Data Integration&#xff0c;簡稱PDI&#xff09;是一個開源的ETL工具&#xff0c;能夠進行數據的抽取&#xff08;Extract&#xff09;、轉換&#xff08;Transform&#xff09;和加載&#xff08;Load&#xff09;。它是…

petalinux2017.4對linux4.9.0打實時補丁

準備工作&#xff1a; 1.windows&#xff1a;安裝vivado 2017.4&#xff0c;xilinx sdk 2017.4 2.ubuntu16.04&#xff1a;安裝petalinux 2017 3.黑金ax7020&#xff0c;sd卡 一、準備linux內核的操作系統 1.1 Petalinux配置 Petalinux使用教程-CSDN博客非常詳細&#xf…

Maven 教程之 pom.xml 詳解

Maven 教程之 pom.xml 詳解 pom.xml 簡介 什么是 pom POM 是 Project Object Model 的縮寫,即項目對象模型。 pom.xml 就是 maven 的配置文件,用以描述項目的各種信息。 pom 配置一覽 <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi

Golang的緩存一致性策略

Golang的緩存一致性策略 一致性哈希算法 在Golang中&#xff0c;緩存一致性策略通常使用一致性哈希算法來實現。一致性哈希算法能夠有效地解決緩存節點的動態擴容、縮容時數據重新分布的問題&#xff0c;同時能夠保證數據訪問的均衡性。 一致性哈希算法的核心思想是將節點的哈希…

【機器學習:一、機器學習簡介】

機器學習是當前人工智能領域的重要分支&#xff0c;其目標是通過算法從數據中提取模式和知識&#xff0c;并進行預測或決策。以下從 機器學習概述、有監督學習 和 無監督學習 三個方面進行介紹。 機器學習概述 機器學習定義 機器學習&#xff08;Machine Learning&#xff0…

藍橋杯JAVA--003

需求 2.代碼 public class RegularExpressionMatching {public boolean isMatch(String s, String p) {if (p.isEmpty()) {return s.isEmpty();}boolean firstMatch !s.isEmpty() && (s.charAt(0) p.charAt(0) || p.charAt(0) .);if (p.length() > 2 && p…

被催更了,2025元旦源碼繼續免費送

“時間從來不會停下&#xff0c;它只會匆匆流逝。抓住每一刻&#xff0c;我們才不會辜負自己。” 聯系作者免費領&#x1f496;源&#x1f496;碼。 三聯支持&#xff1a;點贊&#x1f44d;收藏??留言&#x1f4dd;歡迎留言討論 更多內容敬請期待。如有需要源碼可以聯系作者免…

WebRTC的線程事件處理

1. 不同平臺下處理事件的API&#xff1a; Linux系統下&#xff0c;處理事件的API是epoll或者select&#xff1b;Windows系統下&#xff0c;處理事件的API是WSAEventSelect&#xff0c;完全端口&#xff1b;Mac系統下&#xff0c;kqueue 2. WebRTC下的事件處理類&#xff1a; …

關于Zotero

1、文獻數據庫&#xff1a; Zotero的安裝 Zotero安裝使用_zotero只能安裝在c盤嗎-CSDN博客 2、如何使用zotero插件 我剛下載的時候就結合使用的是下面的這兩個博主的分享&#xff0c;感覺暫時是足夠的。 Zotero入&#x1f6aa;基礎 - 小紅書 Green Frog申請easyscholar密鑰…

企業三要素如何用PHP實現調用

一、什么是企業三要素&#xff1f; 企業三要素即傳入的企業名稱、法人名稱、社會統一信用代碼或注冊號&#xff0c;校驗此三項是否一致。 二、具體怎么樣通過PHP實現接口調用&#xff1f; 下面我們以阿里云為例&#xff0c;通過PHP示例代碼進行調用&#xff0c;參考如下&…

Go 語言中強大的配置管理庫—Viper

Viper 是 Go 語言中強大的配置管理庫&#xff0c;廣泛用于云原生和微服務開發中。它支持多種配置文件格式&#xff08;如 YAML、JSON、TOML 等&#xff09;、環境變量、命令行參數以及遠程配置管理。 Viper 的主要功能 1. 支持多種格式的配置文件&#xff1a; ? YAML、JSON…

鴻蒙-封裝loading動畫

import { AnimatorOptions, AnimatorResult } from "kit.ArkUI" export enum SpinImageType { RedLoading, WhiteLoading } Component export struct SpinImage { Prop type?: SpinImageType Prop url?: string State animatedValue: number 0 …