Advertisement
nikunjsoni

302

May 14th, 2021
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int minArea(vector<vector<char>>& image, int x, int y) {
  4.         int rows = image.size(), cols = image[0].size();
  5.         int left = searchCol(image, 0, y, 0, rows, true);
  6.         int right = searchCol(image, y+1, cols, 0, rows, false);
  7.         int top = searchRow(image, 0, x, left, right, true);
  8.         int bottom = searchRow(image, x+1, rows, left, right, false);
  9.         cout<<left<<" "<<right<<" "<<top<<" "<<bottom<<endl;
  10.         return (right-left) * (bottom-top);
  11.     }
  12.    
  13.     int searchCol(vector<vector<char>>& image, int l, int r, int start, int end, bool whiteToBlack){
  14.         while(l<r){
  15.             int mid = (l+r)/2, tmp = start;
  16.             while(tmp < end && image[tmp][mid] == '0') tmp++;
  17.             if(tmp < end == whiteToBlack)
  18.                 r = mid;
  19.             else
  20.                 l = mid+1;
  21.         }
  22.         return l;
  23.     }
  24.    
  25.     int searchRow(vector<vector<char>>& image, int l, int r, int start, int end, bool whiteToBlack){
  26.         while(l<r){
  27.             int mid = (l+r)/2, tmp = start;
  28.             while(tmp < end && image[mid][tmp] == '0') tmp++;
  29.             if(tmp < end == whiteToBlack)
  30.                 r = mid;
  31.             else
  32.                 l = mid+1;
  33.         }
  34.         return l;
  35.     }
  36.    
  37. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement