Итак, у меня есть назначение, мне нужно повернуть все 1 в массиве на расстояние от ближайшего 0. И поэтому, когда я запускаю его, последнее число в выходных данных остается равным 1, когда оно должно было измениться на 2. может ли кто-нибудь помочь мне определить мою ошибку?
В основном, что делает zeroDistance, - это передать массив один раз, изменив все значения, затем запустить обратно и изменить их все снова.
public static void zeroDistance (int [] a)
{
int counter = 0;
for (int i = 0; i < a.length; i++)
{
if (a[i] == 0)
counter = 0;
if (a[i] == 1)
{
counter++;
a[i] = counter;
}
}
counter = 0;
for (int i = a.length - 1; i >= 0; i--)
{
if (a[i] == 0)
counter = 0;
if (a[i] != 0)
{
counter++;
if (a[i] > counter)
a[i] = counter;
}
}
}
Вход:
int[] a={0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1};
Выход:
zeroDistance method result :
0, 1, 2, 3, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, 1, 1
Should return :
0, 1, 2, 3, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, 1, 2