Easy
题目描述
给你两个字符串数组 event1 和 event2,它们表示在同一天发生的两个闭区间事件,其中:
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 == 2event1[i].length == event2[i].length == 5startTime1 <= endTime1startTime2 <= endTime2- 所有事件时间都遵循
HH:MM格式
解题思路
这道题本质是判断两个时间区间是否有重叠。解决这类问题有两种思路:
方法一:直接字符串比较(推荐)
由于时间格式是固定的 HH:MM,且小时和分钟都是两位数,可以直接利用字符串的字典序比较。对于两个闭区间 [a,b] 和 [c,d],它们有交集的条件是:a <= d 且 c <= b。
这种方法简洁高效,避免了时间转换的开销。
方法二:转换为分钟数
将时间字符串转换为从 00:00 开始的分钟数,然后比较数值大小。虽然更直观,但需要额外的解析和计算步骤。
方法三:使用内置时间比较
某些语言提供了直接的时间比较功能,但在这种简单场景下可能过于复杂。
由于字符串比较方法最简洁且效率最高,我们采用第一种方法作为主要解法。
代码实现
class Solution {
public:
bool haveConflict(vector<string>& event1, vector<string>& event2) {
return event1[0] <= event2[1] && event2[0] <= event1[1];
}
};
class Solution:
def haveConflict(self, event1: List[str], event2: List[str]) -> bool:
return event1[0] <= event2[1] and event2[0] <= event1[1]
public class Solution {
public bool HaveConflict(string[] event1, string[] event2) {
return string.Compare(event1[0], event2[1]) <= 0 &&
string.Compare(event2[0], event1[1]) <= 0;
}
}
var haveConflict = function(event1, event2) {
return event1[0] <= event2[1] && event2[0] <= event1[1];
};
复杂度分析
| 复杂度类型 | 大小 |
|---|---|
| 时间复杂度 | O(1) |
| 空间复杂度 | O(1) |
相关题目
. Merge Intervals (Medium)
. Non-overlapping Intervals (Medium)
. My Calendar I (Medium)