一. 题目
-
题目
给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。
请你统计并返回 grid 中 负数 的数目。 -
示例
二. 方法一: 暴力法
-
解题思路
此方法并没有用到矩阵有序的性质 -
解题代码
def countNegatives(self, grid: List[List[int]]) -> int: count = 0 for m in range(len(grid)): for n in range(len(grid[0])): if grid[m][n] < 0: count += 1 return count
-
分析
时间复杂度: O(n^2)
空间复杂度: O(1)
三. 方法二
-
解题思路
- 因为矩阵中每一行都是有序的(从大到小排序)
- 只要找到每一行的第一个小于0的数据, 则就可以通过其下标算出改行小于0的元素个数
-
解题代码
def countNegatives(self, grid: List[List[int]]) -> int: m = len(grid) n = len(grid[0]) count = 0 for i in range(m): for j in range(n): if grid[i][j] < 0: count += n - j break return count
-
分析
时间复杂度: O(n^2)
空间复杂度: O(1)