LeetCode Solutions (161 серия деталей)
Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашли его полезным, Пожалуйста, нравится Этот пост и/или upvote Мое решение по сообщению на форумах LeetCode Анкет
Примечание : Это моя первая версия решения решения для этой проблемы. Я предпочитаю это решение, но моя вторая версия технически имеет лучшую сложность времени ( O (m * log (n + k)) против. O (m * n) ), а также лучшая сложность пространства ( Ok) против. O (м) ), но это делает это с помощью Функция бинарного поиска , a Max-HEAP Структура данных , а также Бит манипуляции , которые являются довольно сложными инструментами для «легкой» проблемы.
Если вы хотите проверить более сложное решение, Вы можете найти полный разрыв здесь .
Проблема LeetCode #1337 (легко): самые слабые ряды в матрице
Описание:
Данный а M * n матрица мат из тех (представляющих солдат) и нули (представляющие гражданских лиц), возвращают индексы k Самые слабые ряды в матрице, упорядоченные от самых слабых до самых сильных.
Строка i слабее ряда j , если количество солдат в ряд i меньше, чем количество солдат в ряду j , или у них такое же количество солдат, но i меньше чем j . Солдаты всегда стоят на границе ряда, то есть всегда могут появиться сначала, а затем нули.
Примеры:
Вход: | mat = [[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1,1]] |
Выход: | [2,0,3] |
Объяснение: | Количество солдат для каждой строки: ряд 0 -> 2 строка 1 -> 4 строка 2 -> 1 строка 3 -> 2 строки 4 -> 5 рядов, заказанных от самых слабых до самых сильных, -[2,0,3, 1,4] |
Вход: | mat = [[1,0,0,0],[1,1,1,1],[1,0,0,0],[1,0,0,0]] |
Выход: | [0,2] |
Объяснение: | Количество солдат для каждой строки: ряд 0 -> 1 строка 1 -> 4 строки 2 -> 1 строка 3 -> 1 строки, заказанные от самых слабых до самых сильных, -[0,2,3,1] |
Ограничения:
M.Length
n [i] .length
2, м
1
Mat [i] [j]
это либо0
или1
Анкет
Идея:
Поскольку солдаты всегда находятся в передней части каждого ряда, мы можем заметить, что первый ряд, показывающий гражданина в любом данном столбце, является первым индексом, который должен быть представлен в нашем массиве ответов ( ans ).
Это означает, что мы можем найти правильные элементы Анс По порядку, просто итерация через столбцы, сверху вниз и подтолкнуть ряды к Ответ один, как их граждане подвергаются воздействию. Затем нам просто нужно отследить, какие ряды уже закончили с флагом в нашем посещенном массиве ( vis ).
Как только мы заполнили Анс С самым слабым K Индексы строк, мы должны вернуть ANS Анкет
Реализация:
Для JavaScript мы должны использовать легкий типичный Uint8array для VIS Анкет
Для Java и C ++ мы должны объявить наш массив ANS с фиксированным измерением, а затем использовать отдельную переменную индекса ( kix ), чтобы разместить элементы в соответствующие положения.
Код JavaScript:
var kWeakestRows = function(M, K) { let y = M.length, x = M[0].length, vis = new Uint8Array(y), ans = [] for (let j = 0; j <= x; j++) for (let i = 0; i < y; i++) { if (!vis[i] && !M[i][j]) ans.push(i), vis[i]++ if (ans.length === K) return ans } };
Код Python:
class Solution: def kWeakestRows(self, M: List[List[int]], K: int) -> List[int]: y, x = len(M), len(M[0]) vis, ans = [0] * y, [] for j in range(x+1): for i in range(y): if not vis[i] and (j == x or not M[i][j]): ans.append(i) vis[i] = 1 if len(ans) == K: return ans
Код Java:
class Solution { public int[] kWeakestRows(int[][] M, int K) { int y = M.length, x = M[0].length, kix = 0; int[] vis = new int[y], ans = new int[K]; for (int j = 0; j <= x; j++) for (int i = 0; i < y; i++) { if (vis[i] == 0 && (j == x || M[i][j] == 0)) { ans[kix++] = i; vis[i]++; } if (kix == K) return ans; } return ans; } }
C ++ Код:
class Solution { public: vectorkWeakestRows(vector >& M, int K) { int y = M.size(), x = M[0].size(), kix = 0; vector vis(y), ans(K); for (int j = 0; j <= x; j++) for (int i = 0; i < y; i++) { if (!vis[i] && (j == x || !M[i][j])) { ans[kix++] = i; vis[i]++; } if (kix == K) return ans; } return ans; } };
LeetCode Solutions (161 серия деталей)
Оригинал: “https://dev.to/seanpgallivan/solution-the-k-weakest-rows-in-a-matrix-2679”