解法一 4 binary search
class Solution {
public:
int minArea(vector<vector<char>> &image, int x, int y) {
int n = image.size(), m =image[0].size();
int left=0, right=0, high=0, low=0;
int l=0, r=x;
while(l<r){
int mid = l+(r-l)/2;
if(checkR(image, mid)) r=mid;
else l=mid+1;
}
high = r;
l=x, r=n-1;
while(l<=r){
int mid = l+(r-l)/2;
if(checkR(image, mid)) l=mid+1;
else r=mid-1;
}
low = l-1;
l=0, r=y;
while(l<r){
int mid = l+(r-l)/2;
if(checkC(image, mid)) r=mid;
else l=mid+1;
}
left = r;
l=y, r=m-1;
while(l<=r){
int mid = l+(r-l)/2;
if(checkC(image, mid)) l=mid+1;
else r=mid-1;
}
right = l-1;
return (low-high+1)*(right-left+1);
}
bool checkR(vector<vector<char>> &image, int r){
for(int i=0;i<image[0].size();i++){
if(image[r][i]=='1') return true;
}
return false;
}
bool checkC(vector<vector<char>> &image, int c){
for(int i=0;i<image.size();i++){
if(image[i][c]=='1') return true;
}
return false;
}
};