diff --git a/README.md b/README.md index b2cac73..b6509ab 100644 --- a/README.md +++ b/README.md @@ -341,7 +341,7 @@ Check out ---> [Sample PR](https://github.com/codedecks-in/LeetCode-Solutions/pu | 743 | [Network Delay Time](https://leetcode.com/problems/network-delay-time/) | [C++](./C++/Network-delay-time.cpp) | _O(V+E))_ | O(V) | Medium | BFS | | 111 | [Min Depth of Binary Tree](https://leetcode.com/problems/minimum-depth-of-binary-tree/) | [JavaScript](./JavaScript/111-minimum-depth-of-binary-tree.js) | O(nlogn) | O(nlogn) | Easy | BFS | | 100 | [Same Tree](https://leetcode.com/problems/same-tree/) | [C++](https://github.com/codedecks-in/LeetCode-Solutions/blob/master/C%2B%2B/100_Same_Tree.cpp) | O(N) | O(N) | Easy | BFS | - +| 130 | [Surrounded Regions](https://leetcode.com/problems/surrounded-regions/) | [C++](./C++/kth-smallest-element-in-a-bst.cpp) | _O(m*n)_ | _O(m*n)_ | Medium | DFS | |
@@ -515,6 +515,7 @@ DISCLAIMER: This above mentioned resources have affiliate links, which means if | [Shrimadh V Rao](https://github.com/Shrimadh)
| India | C++ | [GitHub](https://github.com/Shrimadh) | [Shreyas Shrawage](https://github.com/shreyventure)
| India | Python | [CodeChef](https://www.codechef.com/users/shreyventure)
[LeetCode](https://leetcode.com/shreyventure/)
[HackerRank](https://www.hackerrank.com/shreyas_shrawage) | [Surbhi Mayank](https://github.com/surbhi2408)
| India | C++ | [GitHub](https://github.com/surbhi2408) +| [Nick H](https://github.com/n1i9c9k9)
| Germany | C++ | [GitHub](https://github.com/n1i9c9k9)
⬆️ Back to Top
diff --git a/surrounded-regions.cpp b/surrounded-regions.cpp new file mode 100644 index 0000000..8dd278c --- /dev/null +++ b/surrounded-regions.cpp @@ -0,0 +1,64 @@ +#include +#include + +class Solution { +public: + void solve(std::vector>& board) { + if (board.empty() || board[0].empty()) return; + + int m = board.size(); + int n = board[0].size(); + + // Directions for moving up, down, left, right + std::vector> directions = { + {1, 0}, // down + {0, 1}, // right + {0, -1}, // left + {-1, 0} // up + }; + + // BFS function to mark all connected 'O's + auto bfs = [&](int startY, int startX) { + std::queue> q; + q.push({startY, startX}); + board[startY][startX] = 'E'; // Mark as visited with 'E' + + while (!q.empty()) { + auto [y, x] = q.front(); + q.pop(); + + for (const auto& dir : directions) { + int newY = y + dir.first; + int newX = x + dir.second; + + if (newY >= 0 && newY < m && newX >= 0 && newX < n && board[newY][newX] == 'O') { + board[newY][newX] = 'E'; // Mark as visited + q.push({newY, newX}); // Add to queue + } + } + } + }; + + // Check all edge 'O's + for (int i = 0; i < n; ++i) { + if (board[0][i] == 'O') bfs(0, i); // Top row + if (board[m - 1][i] == 'O') bfs(m - 1, i); // Bottom row + } + + for (int j = 1; j < m - 1; ++j) { + if (board[j][0] == 'O') bfs(j, 0); // Left column + if (board[j][n - 1] == 'O') bfs(j, n - 1); // Right column + } + + // Update the board: 'O's not connected to the edges become 'X', and 'E's back to 'O' + for (int i = 0; i < m; ++i) { + for (int j = 0; j < n; ++j) { + if (board[i][j] == 'O') { + board[i][j] = 'X'; // Flip 'O's to 'X's + } else if (board[i][j] == 'E') { + board[i][j] = 'O'; // Restore 'E's back to 'O's + } + } + } + } +}; \ No newline at end of file