区间调度问题,例如同时只能做一件工作(结束和开始瞬间重合也不行),问互相冲突的工作中最多能做几件

package demo2;

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

public class P124 {
//区间调度问题,例如同时只能做一件工作(结束和开始瞬间重合也不行),问互相冲突的工作中最多能做几件
//思路:贪心策略,每次取最早结束的工作。
//自定义类Job,方便按结束时间对工作排序
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] sArr=new int[n];
		int[] eArr=new int[n];
		Job[] jArr=new Job[n];
		for(int i=0;i<n;i++) {
			sArr[i]=sc.nextInt();
		}
		for(int i=0;i<n;i++) {
			eArr[i]=sc.nextInt();
		}
		for(int i=0;i<n;i++) {
			jArr[i]=new Job(sArr[i],eArr[i]);
		}
		Arrays.sort(jArr);
		int result=func(jArr);
		System.out.println("最多完成"+result+"件工作");
	}

	static int func(Job[] jArr) {
		int cnt=1;
		int endTime=jArr[0].end;
		for(int i=1;i<jArr.length;i++) {
			if(jArr[i].start>endTime) {
				cnt++;
				endTime=jArr[i].end;
			}
		}
		return cnt;
	}

}

class Job implements Comparable<Job>{
	int start;
	int end;
	
	public Job(int start,int end) {
		this.start=start;
		this.end=end;
	}
	
	@Override
	public int compareTo(Job other) {
		int x=this.end-other.end;
		if(x==0) {
			return this.start-other.end;
		}
		else {
			return x;
		}
	}
	
}
posted @   fighterk  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示