Java 8, 100 bajtów
m->m.indexOf(m.stream().map(z->{z.removeIf(x->x==0);return z;}).max((q,r)->q.size()-r.size()).get())
Wyjaśnienie
Moc list i strumieni! (i bez importu, aby uruchomić!)
Podzielmy tę małą lambda na części:
m.stream().map(z->{z.removeIf(x->x==0);return z;}
Przekształcamy naszą listę list (macierz w pytaniu) w strumień i przeglądamy każdy element, usuwając wszystkie te nieznośne zera z każdej podlisty. Za każdym razem musimy jawnie zwrócić listę podrzędną, ponieważ Stream.map()
konwertuje każdy obiekt w strumieniu na wszystko, co zwraca mapowanie, i nie chcemy ich zmieniać.
.max((q,r)->q.size()-r.size()).get()
Przeglądamy nasze nowo wyzerowane podlisty i po prostu sprawdzamy, jak duże są obok siebie, co daje nam największą podlistę. Jest .get()
tak, ponieważ Stream.max()
zwraca wartość Opcjonalne, wymagającą wywołania dodatkowej funkcji.
m.indexOf()
Bierzemy tę największą podlistę i znajdujemy ją na głównej liście, dając nam nasz wynik!
Uwagi
To się psuje, jeśli zewnętrzna lista jest pusta, ale biorę
Możesz założyć, że będzie tylko jeden wiersz z najbardziej niezerowymi elementami.
sugerować, że zawsze będzie co najmniej jeden rząd. Popraw mnie, jeśli się mylę.
Ā
zamiastÄ0›
dla -2.