Practice Exercise 4.1.B
ActivitySelection.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ActivitySelection {
static class Activity {
public int id;
public int start;
public int finish;
public Activity(int i, int s, int f) {
id = i;
start = s;
finish = f;
}
}
public List<Activity> select(List<Activity> activities) {
List<Activity> selected = new ArrayList<>();
List<Activity> sortedActivities = new ArrayList<>(activities);
Collections.sort(sortedActivities, (o1, o2) -> Integer.signum(o1.finish - o2.finish));
if (sortedActivities.size() > 0)
selected.add(sortedActivities.get(0));
for (int i = 1; i < sortedActivities.size(); i++)
if (sortedActivities.get(i).start >= selected.get(selected.size() - 1).finish)
selected.add(sortedActivities.get(i));
return selected;
}
public static void main(String[] args) {
List<Activity> activities = new ArrayList<>();
activities.add(new Activity(1, 600, 720));
activities.add(new Activity(2, 1200, 1380));
activities.add(new Activity(3, 1020, 1140));
activities.add(new Activity(4, 600, 630));
activities.add(new Activity(5, 1140, 1230));
activities.add(new Activity(6, 1290, 1380));
activities.add(new Activity(7, 750, 810));
activities.add(new Activity(8, 1200, 1320));
activities.add(new Activity(9, 1020, 1170));
activities.add(new Activity(10, 960, 1140));
activities.add(new Activity(11, 900, 1020));
ActivitySelection selection = new ActivitySelection();
List<Activity> selected = selection.select(activities);
for (int i = 0; i < selected.size(); i++) {
System.out.print(selected.get(i).id);
if (i + 1 < selected.size())
System.out.print(", ");
else
System.out.print("\n");
}
}
}Last updated