安排会议(区间问题、贪心)

      关于区间问题还有我的另一篇博客https://blog.csdn.net/qq_34115899/article/details/79388870

题目: 一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行 的宣讲的场次最多。输出这个最多的宣讲场次。

区间问题都是选用早结束为策略的,谁结束早就先做哪个宣讲。有人可能会想以先开始为贪心策略, 或者选用时间短的

输入

5
1   3
2   5
4   7
6   9
8   10

输出

3

import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class test {

    public static class Program {
        int start, end;

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

    public static int bestArrange(Program[] p) {
        int ans = 0;
        Arrays.sort(p, new Comparator<Program>() { // 哪场会议结束时间早就排在前面
            public int compare(Program o1, Program o2) {
                return o1.end - o2.end;
            }
        });
        int start = 0;
        for (int i = 0; i < p.length; ++i) {
           if (start <= p[i].start) {  // 端点不重合可以去掉等号
               start = p[i].end; // 记录下一场能开始的时间
               ++ans;
           }
        }
        return ans;
    }

    public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        int n = cin.nextInt();
        Program[] p = new Program[n];
        for (int i = 0; i < n; ++i) {
            int start = cin.nextInt();
            int end = cin.nextInt();
            p[i] = new Program(start, end);
        }
        cin.close();
        System.out.println(bestArrange(p));
    }
}
========================================Talk is cheap, show me the code=======================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

砖业洋__

你的鼓励是我持续写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值