题目来源:
leetcode题目,网址:2373. 矩阵中的局部最大值 - 力扣(LeetCode)
解题思路:
开辟一个大小为(n-2)*(n-2)的二维整型数组res存放结果,开辟一个大小为3的一维整型数组temp存放需比较的三列的最大值。在遍历原数组求最大值时,比较完当前三列并获得最大值后,当前需比较的三列中的后两列在下一次操作中可能会用到,将其前在数组中的位置向前移动一位,然后在下一次比较中可能只需要获得三列中一列的最大值。
解题代码:
class Solution {
public int[][] largestLocal(int[][] grid) {
int[][] res=new int[grid.length-2][grid[0].length-2];//存放结果
int[] temp=new int[3];//存放前三列前三行最大值
for(int i=0;i<res.length;i++){
temp[0]=forMax(grid[i][0],grid[i+1][0],grid[i+2][0]);
temp[1]=forMax(grid[i][1],grid[i+1][1],grid[i+2][1]);
for(int j=0;j<res[0].length;j++){
temp[2]=forMax(grid[i][j+2],grid[i+1][j+2],grid[i+2][j+2]);
res[i][j]=forMax(temp[0],temp[1],temp[2]);
temp[0]=temp[1];
temp[1]=temp[2];
}
}
return res;
}
public static int forMax(int i,int j, int k){
int res= i>j?i:j;
return res>k?res:k;
}
}
总结:
写解题思路时想到可以对原数组进行1次获取2*2的局部最大值,然后在对产生的数组进行一次获取2*2的局部最大值,结果即为所求。
官方题解里面只提供了暴力遍历一种解法。