(算法)区间调度问题

               问题大致如下所述:有n项工作,每项工作分别在s时间开始,在t时间结束. 对于每项工作,你都可以选择参与与否,如果选择了参与,那么自始至终都必须全程参与.    
        此外,参与工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也是不允许的).  你的目标是参与尽王多的工作,那么最多能参与多少项工作呢?

        问题解决思路:通过排序确定从小到大的开始时间,如选择第一个工作,即看事件谁的结束时间最小。再次选择下一个工作(即第二个工作),则判断第一个工作结束时间必须大于第二个工作开始时间,且结束时间小的先安排上。如此类推。

代码:

import java.util.Arrays;
import java.util.Scanner;

public class qujian {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] s = new int[n];   //创建两个数组 s 和 t,分别存储每个任务的开始时间和结束时间
        int[] t = new int[n];
        Job[] jobs = new Job[n];    //创建一个 Job 数组 jobs,将每个任务的开始时间和结束时间封装成 Job 对象,方便进行排序。
        for (int i = 0; i < n; i++) {
            s[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            t[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            jobs[i] = new Job(s[i], t[i]);
        }
        Arrays.sort(jobs);
        int res = f(n, jobs);
        System.out.println(res);
    }

    private static int f(int n, Job[] jobs) {
        int cnt = 1;
        int y = jobs[0].t;  // y 为当前任务的结束时间
        for (int i = 0; i < n; i++) {
            if (jobs[i].s > y) {
                cnt++;      //如果当前任务的开始时间大于 y,则说明可以完成这个任务,
                            // cnt 加 1,并更新 y 为当前任务的结束时间
                y = jobs[i].t;
            }
        }
        return cnt;
    }

    private static class Job implements Comparable<Job> {
        int s;
        int t;

        public Job(int s, int t) {
            this.s = s;
            this.t = t;
        }

        @Override
        public int compareTo(Job other) {
            int x = this.t - other.t;
            if (x == 0)
                return this.s - other.s;
            else
                return x;
        }

    }
}

相关推荐

  1. 贪心算法高频问题-区间问题

    2024-07-18 09:54:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 09:54:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 09:54:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 09:54:03       62 阅读
  4. Python语言-面向对象

    2024-07-18 09:54:03       72 阅读

热门阅读

  1. PHP框架详解:Symfony框架

    2024-07-18 09:54:03       25 阅读
  2. 手写实现getUrlParams方法

    2024-07-18 09:54:03       21 阅读
  3. Ansible 入门:从安装到实际应用

    2024-07-18 09:54:03       19 阅读
  4. 海康相机 导入包MvImport的问题

    2024-07-18 09:54:03       26 阅读
  5. 【Postman】Postman 测试工具介绍与使用

    2024-07-18 09:54:03       19 阅读
  6. 关于redis单线程却能支持高并发业务的原因

    2024-07-18 09:54:03       22 阅读
  7. 软件测试之单元测试

    2024-07-18 09:54:03       23 阅读
  8. C语言经典例题-4

    2024-07-18 09:54:03       18 阅读
  9. Python输出格式_Day4

    2024-07-18 09:54:03       22 阅读
  10. react页面指定dom转pdf导出

    2024-07-18 09:54:03       20 阅读