private static int optimalPoint(int[] magic, int[] dist) {
int startIndex = 0;
int remainingMagic = 0;
int usedMagic = 0;
int length = magic.length;
for (int i = 0; i < length; i++) {
remainingMagic += magic[i] - dist[i];
if (remainingMagic < 0) {
startIndex = i + 1;
usedMagic += remainingMagic;
remainingMagic = 0;
}
}
return usedMagic + remainingMagic >= 0 ? startIndex : -1;
}