Advertisement
nikunjsoni

827

Aug 1st, 2021
998
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int rows, cols;
  4.     int floodFill(vector<vector<int>> &grid, int r, int c, int col){
  5.         if(r<0 || r>=rows || c<0 || c>=cols || grid[r][c] != 1) return 0;
  6.         grid[r][c] = col;
  7.         int area=1;
  8.         area += floodFill(grid, r+1, c, col);
  9.         area += floodFill(grid, r-1, c, col);
  10.         area += floodFill(grid, r, c+1, col);
  11.         area += floodFill(grid, r, c-1, col);
  12.         return area;
  13.     }
  14.    
  15.     int largestIsland(vector<vector<int>>& grid) {
  16.         rows=grid.size(), cols=grid[0].size();
  17.         unordered_map<int, int> colorMap;
  18.         int currCol = 2;
  19.         int maxArea = 0;
  20.         for(int i=0; i<rows; i++)
  21.             for(int j=0; j<cols; j++){
  22.                 if(grid[i][j] == 1){
  23.                     colorMap[currCol] = floodFill(grid, i, j, currCol);
  24.                     maxArea = max(maxArea, colorMap[currCol]);
  25.                     currCol++;
  26.                 }
  27.             }
  28.         for(int i=0; i<rows; i++)
  29.             for(int j=0; j<cols; j++){
  30.                 if(grid[i][j] != 0) continue;
  31.                 unordered_map<int, int> m;
  32.                 if(i-1 >= 0){
  33.                     if(grid[i-1][j] != 0)
  34.                         m[grid[i-1][j]] = colorMap[grid[i-1][j]];
  35.                 }
  36.                 if(j-1 >= 0){
  37.                     if(grid[i][j-1] != 0)
  38.                         m[grid[i][j-1]] = colorMap[grid[i][j-1]];
  39.                 }
  40.                 if(j+1 < cols){
  41.                     if(grid[i][j+1] != 0)
  42.                         m[grid[i][j+1]] = colorMap[grid[i][j+1]];
  43.                 }
  44.                 if(i+1 < rows){
  45.                     if(grid[i+1][j] != 0)
  46.                         m[grid[i+1][j]] = colorMap[grid[i+1][j]];
  47.                 }
  48.                 int area = 1;
  49.                 for(auto it=m.begin(); it != m.end(); it++){
  50.                     area += it->second;
  51.                 }
  52.                 maxArea = max(maxArea, area);
  53.             }
  54.         return maxArea;
  55.     }
  56. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement