首页 › 论坛 › 置顶 › Python中的矩阵模式挑战
正在查看 1 个帖子:1-1 (共 1 个帖子)
-
作者帖子
-
2025-05-13 10:00 #15806Q QPY课程团队管理员
矩阵可以隐藏出令人惊讶的优雅模式——尤其是当它们与递归思维和高效算法结合时。在这篇文章中,我们将探讨两个有趣的矩阵问题,这些问题将考验你的逻辑思维,并帮助你掌握矩阵遍历技术!
问题一:计算小于目标值的元素个数
问题
给定一个矩阵,其中:
- 每一行都是升序排列
- 每一列也都是升序排列
你的任务是?编写一个函数,计算有多少元素小于给定的目标值。没错——你需要在O(n + m)的时间复杂度内完成这个任务。
策略
- 从右上角开始。
- 如果当前值小于目标值,那么该行左侧的所有元素也都小于目标值。因此,计算它们的数量并向下方移动。
- 如果当前值大于或等于目标值,则向左侧移动以寻找更小的数字。
- 继续这样做,直到你脱离矩阵。
Python 解决方案
def count_less_than(matrix, target): if not matrix or not matrix[0]: return 0 n = len(matrix) m = len(matrix[0]) count = 0 row = 0 col = m - 1
while row < n and col >= 0: if matrix[row][col] < target: count += (col + 1) row += 1 else: col -= 1 return count
测试一下!
matrix = [ [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7] ]
print(count_less_than(matrix, 5)) # 输出: 10
这段代码统计了所有小于 5的值,结果为
10
。
问题二:次对角线的最小值和最大值
问题
给定一个 方阵,找出 次对角线 上的 最小值和最大值,次对角线从 右上角到左下角。
示例:
次对角线 → 3 → 6 → 9
策略
- 如果矩阵为空,返回
[None, None]
。 - 对于每个
i
从0
到n-1
,次对角线元素位于索引[i][n - 1 - i]
。 - 在遍历过程中跟踪 最小值 和 最大值。
Python解决方案
def solution(grid): if not grid: return [None, None] n = len(grid) if n == 0: return [None, None] min_value = float('inf') max_value = float('-inf')
for i in range(n): secondary_diagonal_value = grid[i][n - 1 - i] min_value = min(min_value, secondary_diagonal_value) max_value = max(max_value, secondary_diagonal_value) return [min_value, max_value]
测试一下!
grid = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] print(solution(grid)) # 输出: [3, 7]
回顾
- 第一个问题使用贪婪扫描从右上角开始,快速计算符合条件的值。
- 第二个问题是对角线提取,利用固定索引逻辑实现快速的O(n)解决方案。
这些都是排序结构 + 智能遍历如何导致高性能解决方案的优秀示例。
-
作者帖子
正在查看 1 个帖子:1-1 (共 1 个帖子)
- 哎呀,回复话题必需登录。