📅 最后修改于: 2023-12-03 15:37:39.900000 🧑 作者: Mango
给定一个 $n\times n$ 的二维数组 $a_{n,n}$,每个元素的取值为非负整数,设计一个算法找到一个 Plus 形状的图案,使得其中的元素之和最大,返回该最大值。
Plus 形状图案的定义如下:
为了计算一个 Plus 形状的图案的元素之和,我们可以先预处理一些信息;对于该数组的每个位置 $(i, j)$,可以向四个方向分别扩展,得到一个最大的左、右、上、下长度,用分别用 $left_{i,j}, right_{i,j}, up_{i,j}, down_{i,j}$ 表示。
接下来,我们可以枚举每个位置 $(i,j)$,以该位置为中心,计算一个 Plus 形状的图案的元素之和,即:
$$sum_{i,j}=a_{i,j}+\min(left_{i,j}, right_{i,j}, up_{i,j}, down_{i,j})$$
最后,遍历所有 $sum_{i,j}$ 的值,取最大值即可。
时间复杂度: $O(n^2)$