统计有序矩阵中的负数

[复制链接]
发表于 2025-11-11 14:28:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
统计有序矩阵中的负数

形貌

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行照旧按列,都以非递增次序分列。
请你统计并返回 grid 中 负数 的数量
  1. 示例 1:
  2. 输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
  3. 输出:8
  4. 解释:矩阵中共有 8 个负数。
  5. 示例 2:
  6. 输入:grid = [[3,2],[1,0]]
  7. 输出:0
  8. 示例 3:
  9. 输入:grid = [[1,-1],[-1,-1]]
  10. 输出:3
  11. 示例 4:
  12. 输入:grid = [[-1]]
  13. 输出:1
复制代码
代码

最简单的就是暴力破解,但是这个由于有序,以是当我们找到是负数的时间,直接背面可以不判断了
  1. class Solution(object):
  2.     def countNegatives(self, grid):
  3.         count = 0
  4.         for i in range(len(grid)):
  5.             for j in range(len(grid[0])):
  6.                 if grid[i][j] < 0:
  7.                     count += len(grid[0]) - j
  8.                     break
  9.         return count
复制代码
固然由于是不递增的,我们还可以想到使用二分查找法,时间复杂度是 O(logn)
  1. class Solution(object):
  2.     def getIndex(self, line):
  3.         lineLen = len(line)
  4.         left = 0
  5.         right = lineLen - 1
  6.         while left <= right:
  7.             mid = (left + right) // 2
  8.             if line[mid] < 0 and ((mid != 0 and line[mid -1] >= 0) or (mid == 0)):
  9.                 return lineLen - mid
  10.             elif line[mid] < 0:
  11.                 right = mid -1
  12.             else:
  13.                 left = mid + 1
  14.         return 0
  15.     def countNegatives(self, grid):
  16.         count = 0
  17.         for i in range(len(grid)):        
  18.             count += self.getIndex(grid[i])
  19.         return count
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表