golang判斷兩個事件是否存在沖突的方法示例
判斷兩個事件是否存在沖突
給你兩個字符串數組 event1 和 event2 ,表示發(fā)生在同一天的兩個閉區(qū)間時間段事件,其中:
event1 = [startTime1, endTime1] 且 event2 = [startTime2, endTime2]
事件的時間為有效的 24 小時制且按 HH:MM 格式給出。
當兩個事件存在某個非空的交集時(即,某些時刻是兩個事件都包含的),則認為出現 沖突 。
如果兩個事件之間存在沖突,返回 true ;否則,返回 false 。
示例 1:
輸入:event1 = [“01:15”,“02:00”], event2 = [“02:00”,“03:00”]
輸出:true
解釋:兩個事件在 2:00 出現交集。
示例 2:
輸入:event1 = [“01:00”,“02:00”], event2 = [“01:20”,“03:00”]
輸出:true
解釋:兩個事件的交集從 01:20 開始,到 02:00 結束。
示例 3:
輸入:event1 = [“10:00”,“11:00”], event2 = [“14:00”,“15:00”]
輸出:false
解釋:兩個事件不存在交集。
提示:
event1.length == event2.length == 2.
event1[i].length == event2[i].length == 5
startTime1 <= endTime1
startTime2 <= endTime2
所有事件的時間都按照 HH:MM 格式給出
轉換成時間比較
1 將時間字符串解析為小時和分鐘。
2 檢查第一個事件的結束時間是否在第二個事件的開始時間之后,同時也要確保第一個事件的開始時間在第二個事件的結束時間之前。
3 如果以上兩個條件都滿足,那么兩個事件存在交集,即存在沖突。
以下是使用Golang實現這一邏輯的代碼:
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
}
使用純粹的字符串比較和數學邏輯運算
當處理時間區(qū)間的沖突時,除了前面提到的兩種方式,還可以使用純粹的字符串比較和數學邏輯運算。下面是另一種不涉及時間解析的方法,它直接比較時間字符串:
package main
import (
"fmt"
"strings"
)
func isEventConflict(event1 []string, event2 []string) bool {
startTime1, endTime1 := event1[0], event1[1]
startTime2, endTime2 := event2[0], event2[1]
// 檢查第一個事件的結束時間是否早于第二個事件的開始時間,或者第一個事件的開始時間是否晚于第二個事件的結束時間
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
}
這段代碼直接比較時間字符串,不進行時間解析,通過字符串的字典順序來判斷時間區(qū)間是否有交集。這種方法對于簡單的時間字符串可以工作,但不如使用 time 包來處理復雜的時間邏輯更可靠。根據示例輸入,這段代碼將輸出 true,表示兩個事件存在沖突。
請注意,這種方法假定輸入的時間字符串都符合有效的 24 小時制時間格式。
以上就是golang判斷兩個事件是否存在沖突的方法示例的詳細內容,更多關于golang判斷兩個事件沖突的資料請關注腳本之家其它相關文章!
相關文章
golang中cache組件的使用及groupcache源碼解析
本篇主要解析groupcache源碼中的關鍵部分, lru的定義以及如何做到同一個key只加載一次。緩存填充以及加載抑制的實現方法,本文重點給大家介紹golang中cache組件的使用及groupcache源碼解析,感興趣的朋友一起看看吧2021-06-06

