Easy

题目描述

给你两个字符串数组 event1event2,它们表示在同一天发生的两个闭区间事件,其中:

  • 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 格式

解题思路

这道题本质是判断两个时间区间是否有重叠。解决这类问题有两种思路:

方法一:直接字符串比较(推荐)

由于时间格式是固定的 HH:MM,且小时和分钟都是两位数,可以直接利用字符串的字典序比较。对于两个闭区间 [a,b][c,d],它们有交集的条件是:a <= dc <= 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)

相关题目