Java 8, 100 байт
m->m.indexOf(m.stream().map(z->{z.removeIf(x->x==0);return z;}).max((q,r)->q.size()-r.size()).get())
объяснение
Сила списков и потоков! (и без импорта, для загрузки!)
Давайте разберем эту маленькую лямбду на куски:
m.stream().map(z->{z.removeIf(x->x==0);return z;}
Мы превращаем наш список списков (матрицу в вопросе) в поток и проходим через каждый элемент, удаляя все эти надоедливые нули из каждого подсписка. Мы должны явно возвращать подсписок каждый раз здесь, потому чтоStream.map()
преобразует каждый объект в потоке в то, что возвращает отображение, и мы не хотим их изменять.
.max((q,r)->q.size()-r.size()).get()
Мы просматриваем наши недавно обнуленные подсписки и просто проверяем, насколько они велики рядом, получая нам самый большой подсписок. Это .get()
потому, что Stream.max()
возвращает Optional, требующий дополнительного вызова функции.
m.indexOf()
Мы берем этот самый большой подсписок и находим его в основном списке, давая нам наш результат!
Заметки
Это ломается, если внешний список пуст, но я беру
Вы можете предположить, что будет только одна строка с большинством ненулевых элементов.
подразумевать, что всегда будет хотя бы один ряд. Поправьте меня если я ошибаюсь.
Ā
вместоÄ0›
-2.