leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE | |
commit | b2bae2ea3099a571005e6c8f79bea05941a27e88 |
parent | 475eb9b9e6ed1c3561cd8ab9f7db7974ccd395a2 |
author | Dimitrije Dobrota <mail@dimitrijedobrota.com> |
date | Mon, 13 Feb 2023 12:09:01 +0100 |
LeetCode 75 II: Day 10
Diffstat:A | Problems/0417.cpp | | | ++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | README.md | | | ++ |
2 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/Problems/0417.cpp b/Problems/0417.cpp
@@ -0,0 +1,54 @@
class Solution {
typedef vector<vector<int>> Matrix;
typedef vector<vector<bool>> Marked;
typedef queue<pair<int, int>> Queue;
const vector<pair<int, int>> offsets = {
{ 0, 1},
{ 0, -1},
{ 1, 0},
{-1, 0}
};
int n, m;
int valid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
void dfs(Matrix &mat, Marked &mark, int x, int y) {
if (mark[x][y]) return;
Queue q;
q.push({x, y}), mark[x][y] = true;
while (!q.empty()) {
auto [a, b] = q.front();
q.pop();
for (auto [oa, ob] : offsets) {
int x = a + oa, y = b + ob;
if (!valid(x, y) || mark[x][y] || mat[x][y] < mat[a][b]) continue;
mark[x][y] = true;
q.push({x, y});
}
}
}
public:
vector<vector<int>> pacificAtlantic(Matrix &heights) {
n = heights.size(), m = heights[0].size();
Marked pac(n, vector<bool>(m, false)), atl(n, vector<bool>(m, false));
for (int i = 0; i < n; i++) {
dfs(heights, pac, i, 0);
dfs(heights, atl, i, m - 1);
}
for (int i = 0; i < m; i++) {
dfs(heights, pac, 0, i);
dfs(heights, atl, n - 1, i);
}
vector<vector<int>> res;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (pac[i][j] && atl[i][j]) res.push_back({i, j});
return res;
}
};
diff --git a/README.md b/README.md
@@ -210,6 +210,7 @@ for solving problems.
| 0413 | Medium | [Arithmetic Slices](Problems/0413.cpp) |
| 0414 | Easy | [Third Maximum Number](Problems/0414.cpp) |
| 0415 | Easy | [Add Strings](Problems/0415.cpp) |
| 0417 | Medium | [Pacific Atlantic Water Flow](Problems/0417.cpp) |
| 0424 | Medium | [Longest Repeating Character Replacement](Problems/0424.cpp) |
| 0429 | Medium | [N-ary Tree Level Order Traversal](Problems/0429.cpp) |
| 0430 | Medium | [Flatten a Multilevel Doubly Linked list](Problems/0430.cpp) |
@@ -431,3 +432,4 @@ for solving problems.
| 2477 | Medium | [Minimum Fuel Cost to Report to the Capital](Problems/2477.cpp) |
| 2492 | Medium | [Minimum Score of a Path Between Two Cities](Problems/2492.cpp) |
| 2497 | Medium | [Maximum Star Sum of a Graph](Problems/2497.cpp) |