1337. 矩阵中战斗力最弱的 K 行 - 力扣(LeetCode)
可以使用 Python 来解决这个问题。思路如下:
-
遍历每一行,计算军人(1)的数量。
-
将军人数量和行索引组成一个列表
[(count, index)]
。 -
按照军人数量和索引进行排序,优先按军人数量排序,若相同则按行索引排序。
-
取前
k
行的索引作为结果。
下面是 Python 代码实现:
from typing import List
def kWeakestRows(mat: List[List[int]], k: int) -> List[int]:
# 计算每一行的军人数量,并存储 (军人数量, 行索引) 元组
power = [(sum(row), i) for i, row in enumerate(mat)]
# 按军人数量排序,若相同则按索引排序
power.sort()
# 取前 k 行的索引
return [power[i][1] for i in range(k)]
# 示例测试
mat = [
[1, 1, 0, 0, 0],
[1, 1, 1, 1, 0],
[1, 0, 0, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 1, 0, 0]
]
k = 3
print(kWeakestRows(mat, k)) # 输出: [2, 0, 3]
该方法的时间复杂度为 O(m * n + m log m),其中 m 是矩阵的行数,n 是列数。排序的部分占 O(m log m),而计算军人数量占 O(m * n)。如果 n 很小(如常数级别),整体仍然是高效的。