已经告诉你所有的农田都是规整的矩形,题目难度一下子降低了。
对于每一个农田的左上角,找到它的宽度和高度即可。
然后把整个农田矩形标记为林地/非农田即可。
时间复杂度:O(m*n) 每个格子最多遍历3遍。
空间复杂度:O(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Solution { public: vector<vector<int>> findFarmland(vector<vector<int>>& land) { const int m = land.size(); const int n = land[0].size(); vector<vector<int>> ans; for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) { if (!land[i][j]) continue; int w = 0; int h = 0; while (j + w < n && land[i][j + w]) ++w; while (i + h < m && land[i + h][j]) ++h; ans.push_back({i, j, i + h - 1, j + w - 1}); for (int p = 0; p < h; ++p) for (int q = 0; q < w; ++q) land[i + p][j + q] = 0; // mark as seen. } return ans; } }; |
请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.
Be First to Comment