📜  给定矩阵中大小为K的所有平方子矩阵中的最小元素(1)

📅  最后修改于: 2023-12-03 15:41:17.410000             🧑  作者: Mango

给定矩阵中大小为K的所有平方子矩阵中的最小元素

本题要求在给定矩阵中寻找所有大小为K的平方子矩阵,并返回它们中最小的元素值。

算法思路

我们可以分别计算出每个大小为K的平方子矩阵中的最小元素值,并将这些最小值存储在一个列表中。具体步骤如下:

  1. 遍历给定矩阵,从左上角向右下角扫描每个边长为K的正方形。我们可以用两个指针(i,j),代表正方形的左上角坐标,通过双重循环实现。
  2. 对于每个正方形,依次扫描它包含的所有元素,并记录其中最小的元素值。
  3. 将所有正方形中的最小元素值存储在一个列表中,并返回其中最小值。
复杂度分析

算法中两重循环的时间复杂度为O(n^2),每个正方形还需要遍历K^2个元素,所以总体时间复杂度为O(n^2 * K^2)。空间复杂度为O(n^2),存储所有正方形中的最小元素值。

代码实现(Python)
def min_square(matrix, k):
    """
    matrix: 一个n*n的二维列表,表示给定的矩阵
    k: 平方子矩阵的边长
    return: 所有平方子矩阵中的最小元素值
    """
    n = len(matrix)
    res = []

    for i in range(n-k+1):
        for j in range(n-k+1):
            min_val = float("inf")
            for x in range(i, i+k):
                for y in range(j, j+k):
                    if matrix[x][y] < min_val:
                        min_val = matrix[x][y]
            res.append(min_val)

    return min(res)
使用示例
matrix = [[9, 5, 4, 2, 1], 
          [7, 8, 6, 6, 2], 
          [4, 7, 4, 1, 7], 
          [2, 4, 8, 9, 4], 
          [3, 3, 5, 6, 6]]
k = 3

print(min_square(matrix, k))  # 输出:1