1.题目要求:
2.解题步骤:
class Solution {
public:int minimumArea(vector<vector<int>>& grid) {//设置二维数组deque<deque<int>> row_distance;for(int i = 0;i < grid.size();i++){//遍历数组,把每行头部1的小标和尾部1的下标代入其中deque<int> array;array.clear();int left = 0;int right = grid[i].size() - 1;while(left < grid[i].size()&&grid[i][left] != 1){left++;}if(left < grid[i].size()){array.push_back(left);}while(right >= 0&&grid[i][right] != 1){right--;}//如果没有下标,则此行的长度为0if(right >= 0){array.push_back(right);}row_distance.push_back(array);}//把二维数组的头部长度为0的去掉while(row_distance[0].size() == 0){row_distance.pop_front();}//把二维数组的尾部长度为0的去掉while(row_distance[row_distance.size() - 1].size() == 0){row_distance.pop_back();}//每行长度为零,代表此行无1//然后再遍历新数组,找到最长宽度,和最小宽度 int minwidth = 0;int maxwidth = 0;int flag = 1;for(int i = 0;i < row_distance.size();i++){for(int j = 0;j < row_distance[i].size();j++){if(flag == 1){minwidth = row_distance[i][j];maxwidth = row_distance[i][j];flag = 0;}else{if(row_distance[i][j] < minwidth){minwidth = row_distance[i][j];}if(row_distance[i][j] > maxwidth){maxwidth = row_distance[i][j];}}}}//最后返回值return row_distance.size() * (maxwidth - minwidth + 1);}
};