Skip to content

Instantly share code, notes, and snippets.

@amraks
Created June 10, 2018 07:48
Show Gist options
  • Save amraks/3f5d59bd6bf0d26b40303ef9bc2415bf to your computer and use it in GitHub Desktop.
Save amraks/3f5d59bd6bf0d26b40303ef9bc2415bf to your computer and use it in GitHub Desktop.
Merge overlapping meetings
package code;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Meeting {
public int start;
public int end;
public Meeting(int start, int end) {
this.start = start;
this.end = end;
}
}
class MeetingComparator implements Comparator<Meeting> {
@Override
public int compare(Meeting m1, Meeting m2) {
if (m1.start < m2.start) {
return -1;
} else if (m1.start > m2.start) {
return 1;
}
return m1.end <= m2.end ? -1 : 1;
}
}
public class OverlappingMeetings {
public static boolean checkIfMeetingsOverlap(Meeting m1, Meeting m2) {
if (m1.end >= m2.start) {
return true;
}
return false;
}
public static Meeting mergeMeetings(Meeting m1, Meeting m2) {
return new Meeting(m1.start, Math.max(m1.end, m2.end));
}
public static List<Meeting> mergeOverlappingMeetings(List<Meeting> meetings) {
List<Meeting> result = new ArrayList<Meeting>();
result.add(meetings.get(0));
for (int i = 1; i < meetings.size(); i++) {
Meeting cur_meeting = meetings.get(i);
Meeting last_meeting = result.get(result.size() - 1);
if (checkIfMeetingsOverlap(last_meeting, cur_meeting)) {
result.remove(result.size() - 1);
result.add(mergeMeetings(last_meeting, cur_meeting));
} else {
result.add(cur_meeting);
}
}
return result;
}
public static void printMeetings(List<Meeting> l) {
for (Meeting m : l) {
System.out.println(m.start + "," + m.end);
}
}
public static void main(String[] a) {
Meeting m1 = new Meeting(0, 1);
Meeting m2 = new Meeting(3, 5);
Meeting m3 = new Meeting(4, 8);
Meeting m4 = new Meeting(10, 12);
Meeting m5 = new Meeting(9, 10);
List<Meeting> meetings = new ArrayList<Meeting>();
meetings.add(m1);
meetings.add(m2);
meetings.add(m3);
meetings.add(m4);
meetings.add(m5);
Collections.sort(meetings, new MeetingComparator());
printMeetings(meetings);
List<Meeting> r = mergeOverlappingMeetings(meetings);
System.out.println("\nAfter merging....");
printMeetings(r);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment