首页 > 试题广场 >

主持人调度(一)

[编程题]主持人调度(一)
  • 热度指数:2793 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。请问一个只有一个主持人能否举办全部活动。

数据范围:
示例1

输入

[[0,10],[10,20],[20,30]]

输出

true
示例2

输入

[[0,10],[10,20],[15,30]]

输出

false
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param schedule int整型ArrayList<ArrayList<>> 
     * @return bool布尔型
     */
    class InnerModel {
        private int left;
        private int right;
        public InnerModel(int left, int right) {
            this.left = left;
            this.right = right;
        }
        public int getLeft() {
            return left;
        }
        public int getRight() {
            return right;
        }
        @Override
        public String toString() {
            return "[" + left + "," + right + "]";
        }
    }

    public boolean hostschedule(ArrayList<ArrayList<Integer>> schedule) {
        // write code here
        List<InnerModel> total = new ArrayList<>();
        Iterator<ArrayList<Integer>> iterator = schedule.iterator();
        while (iterator.hasNext()) {
            ArrayList<Integer> cur = iterator.next();
            total.add(new InnerModel(cur.get(0), cur.get(1)));
        }
        total.sort(Comparator.comparingInt(InnerModel::getLeft));
        for (int i = 0; i < total.size() - 1; i++) {
            if (total.get(i).getRight() > total.get(i + 1).getLeft()) {
                return false;
            }
        }
        return true;
    }
}

发表于 2022-03-22 22:56:50 回复(0)