dp
四次遍历,分别统计每个点上下左右最多有多少个1,然后四者取最小值,就是这个点加号的阶。
class Solution {
public:
int orderOfLargestPlusSign(int n, vector<vector<int>>& mines) {
bool g[510][510];
memset(g,0,sizeof g);
vector<vector<int>> dp(n,vector<int>(n,0));
for(auto p:mines) g[p[0]][p[1]]=1;
int ans=0;
for(int i=0;i<n;i++){
int cnt=0;
for(int j=0;j<n;j++){
if(g[i][j]) cnt=0;
else cnt++;
dp[i][j]=cnt;
}
cnt=0;
for(int j=n-1;~j;j--){
if(g[i][j]) cnt=0;
else cnt++;
dp[i][j]=min(dp[i][j],cnt);
}
}
for(int i=0;i<n;i++){
int cnt=0;
for(int j=0;j<n;j++){
if(g[j][i]) cnt=0;
else cnt++;
dp[j][i]=min(dp[j][i],cnt);
}
cnt=0;
for(int j=n-1;~j;j--){
if(g[j][i]) cnt=0;
else cnt++;
dp[j][i]=min(dp[j][i],cnt);
ans=max(ans,dp[j][i]);
}
}
return ans;
}
};
时间复杂度:O(n^2)
空间复杂度:O(n^2)

该代码实现了一个寻找二维数组(矩阵)中最大加号标志的阶数的方法。通过四次遍历,统计每个位置周围1的数量,并取最小值作为该位置的阶数。最后返回最大的阶数。时间复杂度为O(n^2),空间复杂度同样为O(n^2)。

被折叠的 条评论
为什么被折叠?



