Подход прост, вам просто нужно поддерживать два числа во время итерации по массиву, текущий счетчик непрерывного блока, равного единице, и последний непрерывный блок, равный нулю.
Примечание: это решение предполагает, что в массиве будет хотя бы один ноль, в противном случае он вернет -1
int cal(int[]data){
int last = 0;
int cur = 0;
int max = 0;
int start = -1;
int index = -1;
for(int i = 0; i < data.length; i++){
if(data[i] == 0){
if(max < 1 + last + cur){
max = 1 + last + cur;
if(start != -1){
index = start;
}else{
index = i;
}
}
last = cur;
start = i;
cur = 0;
}else{
cur++;
}
}
if(cur != 0 && start != -1){
if(max < 1 + last + cur){
return start;
}
}
return index;
}
O (n) время, O (1) пробел
Живая демоверсия: https://ideone.com/1hjS25