LeetCode 764 最大加号标志[动态规划] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 764 最大加号标志[动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道甚至说不上是动态规划的题目,因为对于每一个点的更新,都和别的点无关,解题思路就是把所有点在四个方向上的最短加号距离计算出来,返回最大的那个,也就是说要遍历四次,用大小(n,n)的数组存每个点四个方向上的最小值,代码如下:
class Solution
public:
int orderOfLargestPlusSign(int n, vector<vector<int>>& mines)
vector<vector<int>> dp(n, vector<int>(n, n));
unordered_set<int> banned;
for (auto &&vec : mines)
banned.emplace(vec[0] * n + vec[1]);
int ans = 0;
for (int i = 0; i < n; i++)
int count = 0;
/* left */
for (int j = 0; j < n; j++)
if (banned.count(i * n + j))
count = 0;
else
count++;
dp[i][j] = min(dp[i][j], count);
count = 0;
/* right */
for (int j = n - 1; j >= 0; j--)
if (banned.count(i * n + j))
count = 0;
else
count++;
dp[i][j] = min(dp[i][j], count);
for (int i = 0; i < n; i++)
int count = 0;
/* up */
for (int j = 0; j < n; j++)
if (banned.count(j * n + i))
count = 0;
else
count++;
dp[j][i] = min(dp[j][i], count);
count = 0;
/* down */
for (int j = n - 1; j >= 0; j--)
if (banned.count(j * n + i))
count = 0;
else
count++;
dp[j][i] = min(dp[j][i], count);
ans = max(ans, dp[j][i]);
return ans;
;
以上是关于LeetCode 764 最大加号标志[动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章