import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Meeting { private static List<Double> PS1; // Person 1's Meeting Start times. private static List<Double> PE1; // Person 1's Meeting End times. private static List<Double> PS2; // Person 2's Meeting Start times. private static List<Double> PE2; // Person 2's Meeting End times. private static Double maxTime; public static void main(String[] args) { //TC 1 // PS1 = Arrays.asList(0D,8D); // PE1 = Arrays.asList(1D,23D); // PS2 = Arrays.asList(0D,3D,5D,9D); // PE2 = Arrays.asList(2D,4D,6D,23D); //TC 2 PS1 = Arrays.asList(1D); PE1 = Arrays.asList(2D); PS2 = Arrays.asList(2D); PE2 = Arrays.asList(3D); //TC3 PS1 = Arrays.asList(1D,10D,19D,21D,27D); PE1 = Arrays.asList(5D,14D,20D,23D,30D); PS2 = Arrays.asList(3D,12D,18D,23D); PE2 = Arrays.asList(5D,15D,21D,24D); maxTime = PE1.get(PE1.size() - 1) > PE2.get(PE2.size() - 1) ? PE1.get(PE1.size() - 1) : PE2.get(PE2.size() - 1); FreeTimeSlot P1 = findFreeTimeSlot(PS1,PE1); System.out.println("Free time slots for person 1 :"); printTimeSlot(P1); FreeTimeSlot P2 = findFreeTimeSlot(PS2,PE2); System.out.println("Free time slots for person 2 :"); printTimeSlot(P2); FreeTimeSlot commonFreeTimeSlot = findCommonFreeTimeSlot(P1, P2); System.out.println("Common free time slots for person 1 and person 2 :"); printTimeSlot(commonFreeTimeSlot); } public static void printTimeSlot(FreeTimeSlot timeSlot) { int i=0; for(Double time : timeSlot.S) { System.out.println(time + " " + timeSlot.E.get(i)); i++; } } public static FreeTimeSlot findCommonFreeTimeSlot(FreeTimeSlot P1, FreeTimeSlot P2) { FreeTimeSlot commonFreeTimeSlot = new FreeTimeSlot(); int a = 0; int b = 0; //a is the index for Person 1 //b is the index for Person 2 while (a < P1.S.size() && b < P2.S.size()) { //Person 1's time slot lies completely ahead of Person 2's time slot /* * a b * +-----------------+ +----------------+ */ if(P1.S.get(a) < P2.S.get(b) && P1.E.get(a) <= P2.S.get(b)) { a++; } //Person 2's time slot lies completely ahead of Person 1's time slot /* * b a * +-----------------+ +----------------+ */ else if(P1.S.get(a) > P2.S.get(b) && P1.S.get(a) >= P2.E.get(b)) { b++; } //Start of Person 1's time slot is before start of Person 2's time slot /* * a b * +-------------+---+-------+ */ else if(P1.S.get(a) <= P2.S.get(b)) { commonFreeTimeSlot.S.add(P2.S.get(b)); Double time = P1.E.get(a) < P2.E.get(b) ? P1.E.get(a) : P2.E.get(b); commonFreeTimeSlot.E.add(time); if(P2.E.get(b) < P1.E.get(a)) { b++; } else { a++; } } //Start of Person 2's time slot is before start of Person 1's time slot /* * b a * +-------------+---+-------+ */ else if(P1.S.get(a) > P2.S.get(b)) { commonFreeTimeSlot.S.add(P1.S.get(a)); Double time = P2.E.get(b) < P1.E.get(a) ? P2.E.get(b) : P1.E.get(a); commonFreeTimeSlot.E.add(time); if(P1.E.get(a) < P2.E.get(b)) { a++; } else { b++; } } } return commonFreeTimeSlot; } public static FreeTimeSlot findFreeTimeSlot(List<Double> personStart, List<Double> personEnd) { double s=0; int a = 0; FreeTimeSlot freeTimeSlot = new FreeTimeSlot(); while(a<personStart.size()) { if(s < personStart.get(a)) { freeTimeSlot.S.add(s); freeTimeSlot.E.add(personStart.get(a)); s = personEnd.get(a); a++; } else if(s == personStart.get(a)) { s = personEnd.get(a); a++; } } // Adding the remaining time of the day as a free time slot. int length = freeTimeSlot.E.size(); if(freeTimeSlot.E.get(length - 1) < maxTime && personEnd.get(personEnd.size() - 1) < maxTime) { freeTimeSlot.S.add(personEnd.get(personEnd.size() - 1)); freeTimeSlot.E.add(maxTime); } return freeTimeSlot; } } class FreeTimeSlot { List<Double> S = new ArrayList<Double>(); List<Double> E = new ArrayList<Double>(); }
A blog on programming and software design interview problems and solutions. Also there are some application development related stuff.
Pages
Thursday, December 25, 2014
Java program to find the common interval between the meeting intervals of two persons
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment