LeetCode 252. Meeting Rooms(会议室)

来源:互联网 发布:下载农村淘宝网 编辑:程序博客网 时间:2024/05/04 07:34

原题网址:https://leetcode.com/problems/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.

For example,
Given [[0, 30],[5, 10],[15, 20]],
return false.

思路:按照开始时间排序,排好序之后,检查相邻的时间段是否重叠,方法是看start是否在另一个时间段的start和end之间(因为

start已经排好序,所以只检查这个条件就足够了)

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */public class Solution {    public boolean canAttendMeetings(Interval[] intervals) {        Arrays.sort(intervals, new Comparator<Interval>() {           @Override           public int compare(Interval i1, Interval i2) {               return i1.start - i2.start;           }        });        for(int i=0; i<intervals.length-1; i++) {            if (intervals[i].start <= intervals[i+1].start && intervals[i+1].start < intervals[i].end) return false;        }        return true;    }}

方法二:利用start<end的特性,分别对start和end进行排序。

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */public class Solution {    public boolean canAttendMeetings(Interval[] intervals) {        int[] starts = new int[intervals.length];        int[] ends = new int[intervals.length];        for(int i=0; i<intervals.length; i++) {            starts[i] = intervals[i].start;            ends[i] = intervals[i].end;        }        Arrays.sort(starts);        Arrays.sort(ends);        for(int i=1; i<intervals.length; i++) {            if (ends[i-1] > starts[i]) return false;        }        return true;    }}

0 0
原创粉丝点击