Na początek wkleję kod w C++, który przechodzi:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int liczba;
vector<int> vec;
int MAX;
int k;
while(true)
{
cin>>liczba;
if(liczba!=0)
{
vec.push_back(liczba);
}
else
{
break;
}
}
sort(vec.begin(),vec.end());
k=vec.size();
MAX=vec[k-1];
if(MAX==vec[0])
{
cout<<MAX<<endl;
}
else
{
for(int i=vec.size()-1;i>=0;i--)
{
if(vec[i]!=MAX)
{
cout<<vec[i]<<endl;
break;
}
}
}
Java:
import java.util.Scanner;
import java.util.Vector;
import java.util.Collections;
public class Main
{
public static Scanner sc=new Scanner(System.in);
public static Vector<Integer> vec=new Vector<>();
public static int liczba;
public static int MAX;
public static void main(String[] args) {
while(true)
{
liczba=sc.nextInt();
if(liczba!=0) {
vec.addElement(liczba);
}
else
{
break;
}
}
Collections.sort(vec);
MAX=vec.lastElement();
if(vec.get(0)==MAX)
{
System.out.println(vec.get(0));
}
else
{
for(int i=vec.size()-1;i>=0;i--)
{
if(vec.get(i)!=MAX)
{
System.out.println(vec.get(i));
break;
}
}
}
}
}
Mam teraz pytania odnośnie kodu jak i samego algorytmu:
1)Dlaczego ten sam alogrytm przechodzi test w C++, a w Javie nie :(?
2)Jak poprawić ten algorytm?
Rozumiem, że pytanie sprowadza się do tego jak w posortowanej tablicy znaleźć indeks dla którego wartość maksymalna pojawia się po raz pierwszy?
Wyszukiwanie binarne? Inna kolekcja?
3)To co mi przychodzi do głowy to pomysł aby w ogóle zrezygnować z tablic i sortowania, albo samego sortowania chociaż 
Element maksymalny można znaleźć w trakcie wczytywania danych - Tworzymy zmienną tymczasowa i jak to co aktualnie wpisuje użytkownik jest większe, to napisujemy wartość w tymczasowej. Podobnie tworzymy drugą zmienną tymczasową, którą napisujemy wartością pierwszej zmiennej tymczasowej - Tym samym otrzymujemy "największą liczbę zaraz po wartości maksymalnej". Coś w tym stylu.... Co o tym myślicie?