//Stupid Solution, easy to write and easy to understand.
//Wish guys could find a better solution for this. I am pretty sure there should be a good math function behind this.package com.seabook.google.algorithm;
import java.util.ArrayList;
import java.util.List;
public class ElevatorLimit {
public static void main(String[] args) {
ElevatorLimit elevatorLimit = new ElevatorLimit();
printResult(elevatorLimit.getRange(new int[]{1,0}, new int[]{0, 1}, 1));
printResult(elevatorLimit.getRange(new int[]{1,0}, new int[]{0, 1}, 2));
printResult(elevatorLimit.getRange(new int[]{0,1}, new int[]{1, 0}, 1));
printResult(elevatorLimit.getRange(new int[]{0,2}, new int[]{1, 0}, 1));
printResult(elevatorLimit.getRange(new int[]{6, 85, 106, 1, 199, 76, 162, 141}
, new int[]{38, 68, 62, 83, 170, 12, 61, 114}, 668));
printResult(elevatorLimit.getRange(new int[]{179, 135, 104, 90, 97, 186, 187, 47, 152, 100, 119, 28, 193, 11, 103, 100,
179, 11, 80, 163, 50, 131, 103, 50, 142, 51, 112, 62, 69, 72, 88, 3, 162,
93, 190, 85, 79, 86, 146, 71, 65, 131, 179, 119, 66, 111}
, new int[]{134, 81, 178, 168, 86, 128, 1, 165, 62, 46, 188, 70, 104, 111, 3, 47, 144,
69, 163, 21, 101, 126, 169, 84, 146, 165, 198, 1, 65, 181, 135, 99, 100,
195, 171, 47, 16, 54, 79, 69, 6, 97, 154, 80, 151, 76}, 954));
printResult(elevatorLimit.getRange(new int[]{2}, new int[]{3}, 2));
}
public static void printResult(int[] result) {
if (result == null || result.length == 0) {
System.out.println("{ }");
return ;
}
System.out.println("{" + result[0] + ", " + result[1] + "}");
}
public int[] getRange(int[] enter, int[] exit, int physicalLimit) {
List<Integer> storage = new ArrayList<Integer>();
for (int start = exit[0]; start <= physicalLimit; start ++ ) {
boolean valid = true;
int temp = start;
for (int i = 0; i < exit.length; i++) {
temp -= exit[i];
if (temp < 0) {
valid = false;
break;
}
temp += enter[i];
if (temp > physicalLimit) {
valid = false;
break;
}
}
if (valid)
storage.add(start);
}
if (storage.size() ==0 ) {
return new int[]{};
}
return new int[] {storage.get(0), storage.get(storage.size() - 1)};
}
}