python-leetcode-1337. 矩阵中战斗力最弱的 K 行

1337. 矩阵中战斗力最弱的 K 行 - 力扣(LeetCode)

可以使用 Python 来解决这个问题。思路如下:

  1. 遍历每一行,计算军人(1)的数量。

  2. 将军人数量和行索引组成一个列表 [(count, index)]

  3. 按照军人数量和索引进行排序,优先按军人数量排序,若相同则按行索引排序。

  4. 取前 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 很小(如常数级别),整体仍然是高效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值