2015-02-26 4 views
0

У меня проблема, когда мне нужно найти второй максимальный элемент пользовательских входов. Это проблема онлайн-практики, и я не могу понять, почему сервер отвечает на ошибку NZEC при отправке моего кода. Может ли кто-нибудь сказать мне, какая часть моего кода подвержена таким ошибкам и как я могу справиться с этой ошибкой?Причина ошибки NZEC для этой программы?

Sample Input:=    Sample Output:= 

2        7 
1 3 5 7 8 -1     16 
12 23 16 0 2 -1 

P.S- Первый ввод - это количество тестовых случаев. Вторым и третьим входами являются фактические пользовательские входы соответственно. И пользовательские входы всегда заканчиваются -1.

Вот мой код: =

class SecondLargest { 

    public static void main(String[] args) { 
     Scanner sc=new Scanner(System.in); 
     int testcase=Integer.parseInt(sc.nextLine()); 

     while(testcase-->0){ 
      ArrayList<Long> al=new ArrayList<>(); 
      long num=0; 
      long i=0; 
      while((num=(sc.nextLong()))!=-1){ 
       al.add(num); 
       i++; 
      } 
      Collections.sort(al); 
      if(al.size()==0){ 
       System.err.println(""); 
      } 
      else if(al.size()==1){ 
       System.out.println(al.get(0)); 
      } 
      else if(al.size()>1){ 
      System.out.println(al.get((int)(al.size()-2))); 
      } 
     } 
     } 
    } 

PSS- Большие входные наборы будут использоваться для тестирования программы.

+0

Возможный дубликат: http://stackoverflow.com/questions/28536374/runtime-error-nzec – Mints97

+0

Комментарий абсолютно недействителен. Я видел вашу ссылку, и это не имеет никакого отношения к вышеуказанному вопросу. –

ответ

0

если вы пройдете только один/ноль элемент, то вы получите индекс из связанного исключения в строке:

System.out.println(al.get((int)(i-2)));//negative scenario where you might be expected to return -1? 
+0

Я добавил два S.o.p для одного/нулевого элемента вместе с указанным выше. Но все же он дает мне NZEC. –

+0

Обновите свой код. Почему вы используете долго? Какой диапазон вы ищете? – SMA

+0

Для этой проблемы нет ограничений ввода. Но если один из элементов больше, чем int? Невозможно определить, будут ли значения всегда находиться в диапазоне целых чисел. –

0
else if(al.size()==1){ 
     System.out.println(al.get(0)); 
    } 

не найти второй максимальный элемент, но единственный элемент, который является максимальным элементом!

Изменение если/ElseIf блок для

if(al.size()<2){ 
     System.err.println(""); 
    } else { 
     System.out.println(al.get((int)(al.size()-2))); 
    }