跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Facebook 面试题:会议室
未分類
2 10 月 2020

Facebook 面试题:会议室

Facebook 面试题:会议室

資深大佬 : zzzrf 3

给定一系列的会议时间间隔,包括起始和结束时间[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。

在线做题地址

样例 1

输入: intervals = [(0,30),(5,10),(15,20)] 输出: false 解释: (0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突 

样例 2

输入: intervals = [(5,8),(9,15)] 输出: true 解释: 这两个时间段不会冲突 

题解

暴力做法

for i in 1:n for j in 1:n 判断 i j 有无交集 判断方法,不妨令 i.start<=j.start 若 i.start<=j.start<i.end 就会发生冲突

时间复杂度是 O(N^2)从暴力出发,我们想该怎么优化 冲突的判断条件之一是 i.start<=j.start 那我们可以先对时间间隔按照左端点升序方式进行排序,那么这个条件肯定是满足了 第二个条件 j.start<i.end ,我们可以统计 0 到 j-1 最大的 end

排序+贪心

  • 我们先按照左端点对会议时间间隔进行升序排序,如果左端点相同那么就按右端点升序排序
  • 从左到右扫描一遍会议时间 并维护当前最大的结束时间 maxend,
  • 如果 i.start<maxend 的话 因为已经排过序了,令 idx 的 end 是 maxend idx<i idx.start≤i.start<idx.end 证明两个时间间隔有交集,所以返回 false
  • 有没有可能两个时间有交集,但不符合上面 i.start<maxend 的式子呢? idx 和 i 时间有交集,即 idx.start≤i.start<idx.end A 式 没有交集,即 idx.start<idx.end≤i.start B 式 因为已经排过序了,所以 idx.start≤i.start 所以只要有一个 end 比 i.start 大就会发生交集,最容易比 i.start 大的 end 肯定是前面最大的一个 end 所以不会出现两个时间有交集,但不符合上面 i.start<maxend 的式子的情况 所以 i.start<maxend 这个式子是会议时间冲不冲突的充要条件

复杂度分析:N 表示数组的长度

  • 时间复杂度:取决于排序复杂度 O(NlogN),扫描的复杂度 O(N)
  • 空间复杂度:并没有多开辟空间,所以还是 O(N)的

代码

public class Solution {     /**      * @param intervals: an array of meeting time intervals      * @return: if a person could attend all meetings      */     public boolean canAttendMeetings(List<Interval> intervals) {         // Write your code here         //按起点排序         Collections.sort(intervals, new Comparator<Interval>() {             public int compare(Interval x, Interval y) {                 return x.start - y.start;             }         });         //维护最大的终点         int maxend = -1;         for(int i = 0; i < intervals.size(); i++) {             if(intervals.get(i).start < maxend) {                 return false;             }             maxend = Math.max(maxend, intervals.get(i).end);         }         return true;     } } 

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具