shouldhavedone

V1

2023/05/17阅读:18主题:默认主题

每日一题2446 - 判断两个事件是否存在冲突

问题描述

来源:LeetCode第2446题

难度:简单

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

  • event1 = [startTime1, endTime1]
  • event2 = [startTime2, endTime2]

事件的时间为有效的 24 小时制且按 HH:MM 格式给出。

当两个事件存在某个非空的交集时(即,某些时刻是两个事件都包含的),则认为出现 冲突 。

如果两个事件之间存在冲突,返回 true ;否则,返回 false 。

示例1

输入: nums = [1,3,5,6], tar输入: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
解释:两个事件不存在交集。

提示

  • evnet1.length == event2.length == 2.
  • event1[i].length == event2[i].length == 5
  • startTime1 <= endTime1
  • startTime2 <= endTime2
  • 所有事件的时间都按照 HH:MM 格式给出

解题思路

  • 两个事件不存冲突的条件为一个事件的结束时间大于另一个事件的开始时间
  • 两个事件并未说明谁先开始

解题一

  • 先判断两个事件的开始时间,看哪一个事件先执行
  • 再判断先执行的事件的结束时间和后执行事件的开始时间
/**
 * @param {string[]} event1
 * @param {string[]} event2
 * @return {boolean}
 */

var haveConflict = function (event1, event2{
  if(timeSub(event1[0], event2[0])) {
    return timeSub(event2[1], event1[0])
  } else {
    return timeSub(event1[1], event2[0])
  }
};

// 比较时间
const timeSub = (time1, time2) => {
  let first = time1.split(':')
  let second = time2.split(':')

  if (second[0] > first[0]) {
    return false;
  } else if (second[0] < first[0]) {
    return true;
  } else {
    return second[1] - first[1] > 0 ? false : true
  }
}

解题二

后续发现可以直接字符串时间可以直接比较,直接一行代码搞定

/**
 * @param {string[]} event1
 * @param {string[]} event2
 * @return {boolean}
 */

var haveConflict = function (event1, event2{
  return !(event1[1] < event2[0] || event2[1] < event1[0]);
};

复杂度分析

  • 时间复杂度:O(1),仅使用常数时间。
  • 空间复杂度:O(1),仅使用常数空间。

分类:

前端

标签:

数据结构与算法

作者介绍

shouldhavedone
V1