golang判斷兩個(gè)事件是否存在沖突的方法示例
判斷兩個(gè)事件是否存在沖突
給你兩個(gè)字符串?dāng)?shù)組 event1 和 event2 ,表示發(fā)生在同一天的兩個(gè)閉區(qū)間時(shí)間段事件,其中:
event1 = [startTime1, endTime1] 且 event2 = [startTime2, endTime2]
事件的時(shí)間為有效的 24 小時(shí)制且按 HH:MM 格式給出。
當(dāng)兩個(gè)事件存在某個(gè)非空的交集時(shí)(即,某些時(shí)刻是兩個(gè)事件都包含的),則認(rèn)為出現(xiàn) 沖突 。
如果兩個(gè)事件之間存在沖突,返回 true ;否則,返回 false 。
示例 1:
輸入:event1 = [“01:15”,“02:00”], event2 = [“02:00”,“03:00”]
輸出:true
解釋:兩個(gè)事件在 2:00 出現(xiàn)交集。
示例 2:
輸入:event1 = [“01:00”,“02:00”], event2 = [“01:20”,“03:00”]
輸出:true
解釋:兩個(gè)事件的交集從 01:20 開始,到 02:00 結(jié)束。
示例 3:
輸入:event1 = [“10:00”,“11:00”], event2 = [“14:00”,“15:00”]
輸出:false
解釋:兩個(gè)事件不存在交集。
提示:
event1.length == event2.length == 2.
event1[i].length == event2[i].length == 5
startTime1 <= endTime1
startTime2 <= endTime2
所有事件的時(shí)間都按照 HH:MM 格式給出
轉(zhuǎn)換成時(shí)間比較
1 將時(shí)間字符串解析為小時(shí)和分鐘。
2 檢查第一個(gè)事件的結(jié)束時(shí)間是否在第二個(gè)事件的開始時(shí)間之后,同時(shí)也要確保第一個(gè)事件的開始時(shí)間在第二個(gè)事件的結(jié)束時(shí)間之前。
3 如果以上兩個(gè)條件都滿足,那么兩個(gè)事件存在交集,即存在沖突。
以下是使用Golang實(shí)現(xiàn)這一邏輯的代碼:
package main import ( "fmt" "time" ) func isEventConflict(event1, event2 []string) bool { layout := "15:04" startTime1, _ := time.Parse(layout, event1[0]) endTime1, _ := time.Parse(layout, event1[1]) startTime2, _ := time.Parse(layout, event2[0]) endTime2, _ := time.Parse(layout, event2[1]) // 檢查是否存在沖突(Before 之前 After 之后 Equal 相等) if (startTime1.Before(endTime2) || startTime1.Equal(endTime2)) && (endTime1.After(startTime2) || endTime1.Equal(startTime2)) { return true } return false } func main() { event1 := []string{"01:15", "02:00"} event2 := []string{"02:00", "03:00"} fmt.Println(isEventConflict(event1, event2)) // 輸出:true event1 = []string{"01:00", "02:00"} event2 = []string{"01:20", "03:00"} fmt.Println(isEventConflict(event1, event2)) // 輸出:true event1 = []string{"10:00", "11:00"} event2 = []string{"14:00", "15:00"} fmt.Println(isEventConflict(event1, event2)) // 輸出:false }
使用純粹的字符串比較和數(shù)學(xué)邏輯運(yùn)算
當(dāng)處理時(shí)間區(qū)間的沖突時(shí),除了前面提到的兩種方式,還可以使用純粹的字符串比較和數(shù)學(xué)邏輯運(yùn)算。下面是另一種不涉及時(shí)間解析的方法,它直接比較時(shí)間字符串:
package main import ( "fmt" "strings" ) func isEventConflict(event1 []string, event2 []string) bool { startTime1, endTime1 := event1[0], event1[1] startTime2, endTime2 := event2[0], event2[1] // 檢查第一個(gè)事件的結(jié)束時(shí)間是否早于第二個(gè)事件的開始時(shí)間,或者第一個(gè)事件的開始時(shí)間是否晚于第二個(gè)事件的結(jié)束時(shí)間 if endTime1 < startTime2 || startTime1 > endTime2 { return false } return true } func main() { event1 := []string{"01:15", "02:00"} event2 := []string{"02:00", "03:00"} result := isEventConflict(event1, event2) fmt.Println(result) // 輸出:true }
這段代碼直接比較時(shí)間字符串,不進(jìn)行時(shí)間解析,通過字符串的字典順序來判斷時(shí)間區(qū)間是否有交集。這種方法對(duì)于簡(jiǎn)單的時(shí)間字符串可以工作,但不如使用 time 包來處理復(fù)雜的時(shí)間邏輯更可靠。根據(jù)示例輸入,這段代碼將輸出 true,表示兩個(gè)事件存在沖突。
請(qǐng)注意,這種方法假定輸入的時(shí)間字符串都符合有效的 24 小時(shí)制時(shí)間格式。
以上就是golang判斷兩個(gè)事件是否存在沖突的方法示例的詳細(xì)內(nèi)容,更多關(guān)于golang判斷兩個(gè)事件沖突的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go實(shí)現(xiàn)分布式唯一ID的生成之雪花算法
本文主要介紹了Go實(shí)現(xiàn)分布式唯一ID的生成之雪花算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例
這篇文章主要為大家介紹了GoFrame錯(cuò)誤處理常用方法及錯(cuò)誤碼使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06golang interface{}類型轉(zhuǎn)換的實(shí)現(xiàn)示例
在Go語言中,類型轉(zhuǎn)換可以通過斷言、顯式、隱式和強(qiáng)制四種方式實(shí)現(xiàn),針對(duì)interface{}類型轉(zhuǎn)換為float32或float64,需要使用type斷言或reflect包處理,感興趣的可以了解一下2024-10-10golang中cache組件的使用及groupcache源碼解析
本篇主要解析groupcache源碼中的關(guān)鍵部分, lru的定義以及如何做到同一個(gè)key只加載一次。緩存填充以及加載抑制的實(shí)現(xiàn)方法,本文重點(diǎn)給大家介紹golang中cache組件的使用及groupcache源碼解析,感興趣的朋友一起看看吧2021-06-06golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片
這篇文章主要為大家詳細(xì)介紹了golang使用泛型結(jié)構(gòu)體實(shí)現(xiàn)封裝切片,即封裝切片的增、刪、改、查、長(zhǎng)度大小、ForEach(遍歷切片),感興趣的小伙伴可以學(xué)習(xí)一下2023-10-10