Rohit4Pal

Untitled

Aug 2nd, 2021 (edited)
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #define vi vector<int>
  2. #define vb vector<bool>
  3. #define ss second
  4.  
  5. class Solution {
  6.     int n,m;
  7.     int row[4]={1,-1,0,0},col[4]={0,0,1,-1};
  8. public:
  9.     int largestIsland(vector<vi>& grid) {
  10.  
  11.         n=grid.size();
  12.         unordered_map<int,int> mp;
  13.         mp=maxAreaOfIsland(grid);
  14.        
  15.         int maxArea=0;
  16.         for(auto i:mp)
  17.             maxArea=i.ss>maxArea?i.ss:maxArea;
  18.        
  19.         for(int i=0;i<n;i++){
  20.             for(int j=0;j<n;j++){
  21.                 if(grid[i][j]==0)
  22.                     maxArea=max(maxArea,findAdjMaxArea(grid,i,j,mp));
  23.             }
  24.         }
  25.  
  26.         return maxArea;
  27.     }
  28.  
  29.     int findAdjMaxArea(vector<vi>& grid,int i,int j,unordered_map<int,int> mp){
  30.        
  31.         int maxArea=0;
  32.         set<int> mySet;
  33.         for(int k=0;k<4;k++){
  34.             int x=i+row[k],y=j+col[k];
  35.             if(x>=0 && y>=0 && x<n && y<n && grid[x][y] != 0)
  36.                 mySet.insert(grid[x][y]);
  37.         }
  38.        
  39.         for(int i:mySet){
  40.             maxArea+=mp[i];
  41.         }
  42.         return maxArea+1;
  43.     }
  44.     unordered_map<int,int> maxAreaOfIsland(vector<vi>& grid) {
  45.        
  46.         m=grid.size(),n=grid[0].size();
  47.         unordered_map<int,int> mp;
  48.         //vector<vb> visited(m,vb(n,false));
  49.         int gridId=2;
  50.        
  51.         for(int i=0;i<m;i++){
  52.             for(int j=0;j<n;j++){
  53.                 if(grid[i][j]==1){
  54.                     int area=calMaxArea(grid,i,j,gridId);
  55.                     mp[gridId]=area;
  56.                     gridId++;
  57.                 }  
  58.             }
  59.         }
  60.        
  61.         return mp;
  62.     }
  63.     int calMaxArea(vector<vi>& grid,int i,int j,int gridId){
  64.        
  65.         //base case
  66.         if (i<0 || j<0 || i>=m || j>=n || grid[i][j] != 1)  return 0;
  67.        
  68.         grid[i][j]=gridId;
  69.         int maxArea=0;
  70.        
  71.         for(int k=0;k<4;k++){
  72.             int x=i+row[k],y=j+col[k];
  73.             maxArea+=calMaxArea(grid,x,y,gridId);          
  74.         }
  75.         return maxArea+1;
  76.     }
  77. };
Add Comment
Please, Sign In to add comment