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()
повертає необов'язково, вимагаючи цього додаткового виклику функції.
m.indexOf()
Ми беремо цей найбільший підсклад і знаходимо, де він знаходиться в головному списку, і даємо нам результат!
Примітки
Це порушується, якщо зовнішній список порожній, але я беру
Ви можете припустити, що буде лише один рядок з найбільш ненульовими елементами.
мається на увазі, що завжди буде хоча б один ряд. Виправте мене, якщо я помиляюся.
Ā
замістьÄ0›
-2.