首页 论坛 置顶 Python中的矩阵模式挑战

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #15806

    矩阵可以隐藏出令人惊讶的优雅模式——尤其是当它们与递归思维和高效算法结合时。在这篇文章中,我们将探讨两个有趣的矩阵问题,这些问题将考验你的逻辑思维,并帮助你掌握矩阵遍历技术!


    问题一:计算小于目标值的元素个数

    问题

    给定一个矩阵,其中:

    • 每一都是升序排列
    • 每一也都是升序排列

    你的任务是?编写一个函数,计算有多少元素小于给定的目标值。没错——你需要在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]
    • 对于每个 i0n-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 个帖子)
  • 哎呀,回复话题必需登录。