会议室问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Primary_wind/article/details/80499941

题目

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

您在真实的面试中是否遇到过这个题?
样例
给定区间=[[0,30],[5,10],[15,20]],返回false。

解答

public class MeetingRooms2 {
    public static void main(String[] args) {
        Interval interval1 = new Interval(0, 5);
        Interval interval2 = new Interval(5, 10);
        Interval interval3 = new Interval(15, 20);
        Interval interval4 = new Interval(3, 4);

        List<Interval> intervalList = new ArrayList<Interval>();
        intervalList.add(interval1);
        intervalList.add(interval2);
        intervalList.add(interval3);
        intervalList.add(interval4);
        System.out.println(canAttendMeetings(intervalList));
    }

    /**
     * @param intervals: an array of meeting time intervals
     * @return: if a person could attend all meetings
     */
    public static boolean canAttendMeetings(List<Interval> intervals) {
        if (intervals.size() == 0) {
            return true;
        }
        // Write your code here
        sortIntervals(intervals);
        int max = intervals.get(0).end;
        for (int i = 1; i < intervals.size(); i++) {
            if (intervals.get(i).start < max) {
                return false;
            } else {
                max = intervals.get(i).end;
            }
        }
        return true;
    }

    public static void sortIntervals(List<Interval> intervals) {
        Map<String, Interval> intervalMap = new HashMap<String, Interval>();
        for (Interval interval : intervals) {
            intervalMap.put(interval.start + interval.end + "", interval);
        }

        for (int i = 0; i < intervals.size(); i++) {
            int minIndex = i;
            for (int j = i; j < intervals.size(); j++) {
                if (intervals.get(j).start < intervals.get(minIndex).start) {
                    minIndex = j;
                }
            }
            //交换两个位置
            if (minIndex != i) {
                Interval interval = intervals.get(i);
                intervals.set(i, intervals.get(minIndex));
                intervals.set(minIndex, interval);
            }
        }
        System.out.println(intervals);
    }

    static class Interval {
        int start, end;

        Interval(int start, int end) {
            this.start = start;
            this.end = end;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Primary_wind/article/details/80499941