1

В массиве найти самую длинную последовательность нулей и индекс 1-го элемента вычисленной последовательности. Что не так, подскажите, пожалуйста.

public static void main(String[] args)          
    {   int i, len_max, len_ser, start ;
        int x[] = {2, 2, 0, 0, 0, 5, 1,  0, 0, 0, 0} ;
        len_max = 0;
        len_ser = 0;
        start = 0;
        { for(i=0; i<x.length; i++)
        {
        if(x[i]==0)
            {len_ser = len_ser + 1;}
            else    
                    {if (len_ser > len_max)
                        len_max = len_ser;
                        start = i - len_ser;
                    }
                 len_ser=0;
                    }
       }         
        System.out.println (len_max);       }}

2 ответа 2

5
public class Main {

    public static void main(String[] args) {
        int a[] = {2, 2, 0, 0, 0, 5, 1,  0, 0, 0, 0} ;
        int b[] = new int[a.length];
        int ind = -1;
        int ans = 0;
        if(a[0] == 0) {
            b[0] = 1;
            ind = 0;
            ans = 1;
        }
        for(int i = 1; i < a.length; i++){
            if(a[i] == 0) {
                b[i] = b[i - 1] + 1;
                if(b[i] > ans){
                    ans = b[i];
                    ind = i - b[i] + 1;
                }
            }
        }
        System.out.println(ind);
    }
}
4
  • @myduomilia в вашем коде тоже считает общее количество нулей, а мне нужно самую длинную последовательность. Например: 2, 2, 0, 0, 0, 5, 1, 0, 0, 0, 0, ответом должно быть 4 и 8.
    – liliya
    23 окт 2014 в 14:19
  • 1
    Мой код дает индекс первого элемента самой длиной последовательности нулей. ____ Мой код вернет 7. Так как с седьмого индекса начинается самая длинная последовательность "0". ____ Массив индексироваться начинается с 0.
    – myduomilia
    23 окт 2014 в 14:20
  • @myduomilia извините, перепроверила.)) Спасибо большое, все верно.)
    – liliya
    23 окт 2014 в 14:26
  • 1
    Если код вернет -1, значит вообще нет нулей в последовательности.
    – myduomilia
    23 окт 2014 в 14:27
2

Закину свои 5 копеек:

public class ArrayLongZeroSeq {
        public static void main(String[] args) {
                int s = 0; // счетчик нулей подряд
                int m = 0; // максимум количества нулей подряд
                int p0 = 0; // начало следующей последовательности
                int p = 0; // позиция последней последовательности
//              int x[] = {0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0};
//              int x[] = {0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0};
                int x[] = {0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0};

                for( int i=0; i < x.length; i++) {
                        if (x[i] == 0) s++;
                        if (i + 1 == x.length || x[i] != 0) {
                                if (s > m) {
                                        m = s;
                                        p = p0;
                                }
                                p0 = i + 1;
                                s = 0;
                        }
                }
                System.out.println("Position = " + p);
                System.out.println("Quantity = " + m);
        }
}

Только выдает нули, если ничего вообще не найдет.

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.