• [LeetCode] 252. Meeting Rooms


    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings.

    Example 1:

    Input: [[0,30],[5,10],[15,20]]
    Output: false
    

    Example 2:

    Input: [[7,10],[2,4]]
    Output: true
    

    NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

    会议室。给的input是一个二维数组,二维数组里面的每一个元素记录了每个会议的开始时间和结束时间。问同一个人是否有可能参加所有的会议。思路很简单,但是这是LC上算是一种比较特别的题型 - 扫描线。这题的思路是按照会议开始时间给input排序,如果有任何一个会议的结束时间 > 下一个会议的开始时间,就return false。

    时间O(nlogn)

    空间O(1)

    JavaScript实现

     1 /**
     2  * @param {number[][]} intervals
     3  * @return {boolean}
     4  */
     5 var canAttendMeetings = function(intervals) {
     6     let sorted = intervals.sort((a, b) => a[0] - b[0]);
     7     for (let i = 1; i < intervals.length; i++) {
     8         if (sorted[i - 1][1] > sorted[i][0]) {
     9             return false;
    10         }
    11     }
    12     return true;
    13 };

    Java实现

    Java的做法是按照会议结束时间排序,然后从第二个会议开始看,如果有任何一个会议的开始时间早于前一个会议的结束时间,则return false。思路跟JS的版本其实都是类似的,无非是实现方式稍有差异。

     1 class Solution {
     2     public boolean canAttendMeetings(int[][] intervals) {
     3         Arrays.sort(intervals, (a, b) -> a[1] - b[1]);
     4         for (int i = 1; i < intervals.length; i++) {
     5             if (intervals[i][0] < intervals[i - 1][1]) {
     6                 return false;
     7             }
     8         }
     9         return true;
    10     }
    11 }

    扫描线相关题目

    LeetCode 题目总结

  • 相关阅读:
    Java多线程总结之线程安全队列Queue
    Android模拟器Genymotion使用详解
    Failed to resolve:com.android.support:appcompat-v7:报错处理
    第一次使用Android Studio时你应该知道的一切配置
    sdk manager 打不开
    Android app设置全屏模式
    Android设备与外接U盘实现数据读取操作
    IIS相关优化
    集群、负载均衡、分布式
    docker启动
  • 原文地址:https://www.cnblogs.com/cnoodle/p/11774587.html
Copyright © 2020-2023  润新知