用java写一个贪心算法
时间: 2023-05-24 12:02:36 浏览: 99
A:好的,以下是一个用Java语言实现的贪心算法示例:
假设有一组任务,每个任务都有一个开始时间和结束时间,现在需要从这些任务中选择尽可能多的任务,使得这些任务之间不会相互冲突(即它们的时间段不会重叠)。这可以通过贪心算法进行解决。
import java.util.Arrays;
public class GreedyAlgorithmExample {
static class Task implements Comparable<Task>{
int start;
int end;
Task(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Task o) {
return Integer.compare(this.end, o.end);
}
}
public static void main(String[] args) {
Task[] tasks = {
new Task(1, 4),
new Task(3, 5),
new Task(2, 7),
new Task(5, 8)
};
//按照结束时间从早到晚排序
Arrays.sort(tasks);
int end = -1;
int count = 0;
for (Task task : tasks) {
if (task.start >= end) {
end = task.end;
count++;
}
}
System.out.println(count);
}
}
在这个示例中,我们定义了一个Task类,其中包含开始时间和结束时间。然后,我们按照结束时间将任务数组进行排序。接着,我们依次迭代每个任务,在任务的开始时间不早于之前任务的结束时间的情况下,就认为这个任务可以进行,同时更新最后一个任务的结束时间,并将可进行任务的数量加1。
这个算法的时间复杂度为O(nlogn),因为需要对任务数组进行排序。
阅读全文