赞
踩
lc1337/
给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。 请你返回矩阵中战斗力最弱的 k
行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i
行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前1.0输入:
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]],
k = 3
输出:[2,0,3]
class Solution: def kWeakestRows(self, mat: list[list[int]], k: int) -> list[int]: # 可以根据每一行的大小将她们的索引进行从大到小排序。输出前k个索引。 index_list = sorted(list(range(len(mat))),key=lambda x :self.keyAccording( index = x,mat=mat)) # 特别注意下面这种错误的写法,sort()是原地操作,没有返回值。 #index_list = list(range(len(mat))).sort(key=lambda x :self.keyAccording( index = x,mat=mat)) return index_list[:k] def keyAccording(self, mat: list[list[int]], index): left = 0 right = len(mat[index]) - 1 ans = None while left <= right: mid = (left + right) // 2 if mat[index][mid] == 1: left = mid + 1 ans = mid else: right = mid - 1 if ans == None: return 0 else: return ans + 1 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]] k = 3 aa = Solution() print(aa.kWeakestRows(mat,k))
输出:
[2, 0, 3]
本文的创新点是自定义了比较函数,头一回应用,记录一下。
需要注意的就是:
sort()是进行原地操作,没有返回值。
sorted()是非原地操作,不影响原列表的排序,有返回值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。