leet_code 417无法通过,结果是空,老师帮忙看下
来源:3-1 数据结构遍历的意义
Leon2170781
2019-09-04
leet_code的most vote大部分复制粘贴了到面板也不能通过
int d[4][2] = {{-1,0}, {0,1}, {1,0}, {0, -1}};
int m, n;
vector<vector<bool>> pv;
vector<vector<bool>> av;
int inArea(int x, int y) {
return x >= 0 && x < m && y >= 0 && y < n;
}
void helper(vector<vector<int>>& matrix, vector<vector<bool>> visited, int x, int y) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int newx = x + d[i][0];
int newy = y + d[i][1];
if (inArea(newx, newy) && !visited[newx][newy]
&& matrix[newx][newy] >= matrix[x][y])
helper(matrix, visited, newx, newy);
}
}
vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix) {
vector<vector<int>> res;
m = matrix.size();
if (m == 0)
return res;
n = matrix[0].size();
pv = vector<vector<bool>>(m, vector<bool>(n, false));
av = vector<vector<bool>>(m, vector<bool>(n, false));
for (int i = 0; i < m; i++) {
helper(matrix, pv, i, 0);
helper(matrix, av, i, n - 1);
}
for (int j = 0; j < n; j++) {
helper(matrix, pv, 0, j);
helper(matrix, av, m - 1, j);
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (pv[i][j] && av[i][j]) {
vector<int> it(i, j);
res.push_back(it);
}
return res;
}
写回答
1回答
-
你的代码对于这样的图,返回都是空的:[[1,1],[1,1]]
这是一个 2*2 的图,只有4个节点。请使用单步跟踪的方式,仔细调试你的程序,看一下你的程序为什么最终返回为空?
debug 是计算机专业的重要技能,也是核心技能,更是学习算法的关键。只有不停地debug,不停地寻找自己写的代码的错误,反思自己为什么犯这个错误,以为程序会怎么执行,实际是怎么执行的,不断总结,才能进步哦。
如果你在 debug 的过程中,遇到了类似“我认为对于我的数据,在某一行代码执行以后,结果应该是A,但却是B,不知道为什么”这样的问题,随时欢迎你来问答区:)
最后他推荐两篇我的公众号文章:
加油!:)
022019-09-04
相似问题