Поставив BufferReader вместо Scanner'a, сократил расход памяти до 18 мб(было 23 мб). Также избавился от стрима, заменив сортировку просто на поиск макс значения в sorted(не изменило потребление памяти). Printwriter перед выводом тоже ничего не поменял. Думаю заменить мапу на двумерный лист(не представляю на что еще можно заменить словарь), не уверен, что это будет сильно эффективнее обычной мапы. От Integer'a избавиться не получится никак, так как словарь(или что-то на подобии) невозможно реализовать, используя только фиксированные массивы(а для динамичных(пример List) примитивный тип int использовать нельзя).
Samarkand, выбирается наименьшее из них(если кол-во каждого из этих чисел больше кол-ва этого одного). Но дело не в этом, у меня нет wrong answer ошибок.
Если бэкенд node js, то тебе подойдёт passport.js + cookie-session.js.
Vue тут особо не играет роли, с помощью него и какого-нибудь axios или socket.io обращаешься к серверу с целью проверить, авторизован ли пользователь или нет.