leedcode.85
第一天刷题:菜鸡开始每天刷题!为了成为大佬!
今天的题是一道关于动态规划的题,求一个二维数组里面最大矩形的面积。
核心点是动态规划:
一:(属实借鉴了)
最优子结构性质:每一个局部最大的面积就是这个局部所有局部面积的最大面积
考虑参数:左,右以及高
如何求局部面积?从左至右,从上到下,进行遍历
- height记录高度
- 一个局部面积的计算:从该数向左右拓展为最大长,再由高度计算面积
- max,min的运用为了向上确保拓展至最大
- 自己忽略的点:与上一次情况的比较,两者关系
int solution(int **a, int row, int col) {
vector<int> left(col,0);
vector<int> right(col,col);
vector<int> height(col,0);
int result=0;
for (int k = 0; k < row; k++) {
int ltmp = 0, rtmp = col;
for (int i = 0; i < col; i++) {
if (a[k][i] == 1) {
height[i]++;
left[i] = max(left[i], ltmp);
}
else {
height[i] = 0;
left[i] = 0;
ltmp = i + 1;
}
}
for (int i = col-1; i>=0; i--) {
if (a[k][i] == 1) {
right[i] = min(right[i],rtmp);
}
else {
right[i] = col;
rtmp = i;
}
}
for (int i = 0; i < col; i++) {
result = max(result, (right[i] - left[i]) * height[i]);
}
}
return result;
}
二: