算法3--设计调度算法使规定时间内执行任务最多--贪心策略

       给定开始时间start和结束结束时间end,给定一组任务列表(t1, t2)表示每个任务的起始时间和结束时间。其中每个任务必须按照规定时间执行,不能有重合,设计一个调度算法,使start到end时间内执行任务个数最多。

      可以使用贪心策略,先选取第一个任务,第一个任务应该具有什么特征才能使总任务数最多。第一次,想的是任务的起始时间最小的,尽管起始时间可能最小,然而可能任务结束时间也晚,这样中间一段时间可能执行更多的任务,因此不对。其实应该按照任务的结束时间最小来选取,当选取第一个任务为结束时间最小时,后面可以剩余更多时间来选取其他任务,其实当选取一个任务时,相当于更新start=选取任务的结束时间,这样便转换为一个子问题。

package util;

import java.util.Arrays;
import java.util.Comparator;

public class Study3 {
	
	static class Time{
		int start;
		int end;
		public Time(int start, int end){
			this.start = start;
			this.end = end;
		}
		@Override
		public String toString() {
			// TODO Auto-generated method stub
			return "[" + start + "," + end + "]";
		}
	}
	
	static class TimeComparator implements Comparator

可以使用Arrays.sort方法自定义比较器来对对象进行比较排序,具体来说根据每个对象的end字段升序排序。

使用Arrays对于对象排序可以使用

1.对象实现Comparable接口

2.使用Comparator比较器

对象实现Comparable方式如下:

public class Study3 {
	
	static class Time implements Comparable

 

你可能感兴趣的:(算法与数据结构)