又来了,今天做了好几道了。。还是庞果网的
题目详情
算法描述
这题没什么算法,从第一个索引开始,记为i,另外一个索引从i开始向右移动,记为j,找出在 [ i .. j] 范围内最低的高度,记为H,那么面积等于 H*(j-i+1)
遍历完以后找出最大的面积即可。不知道为什么答题时长180分钟,我害怕还有猫腻,先用小号试了一下然后用大号提交的。。哈哈。。
我看到include的头文件有stack,估计更优的算法使用了栈吧。
代码如下
int shortest(vector<int> arr,int start,int end) { int shortest=arr[start]; int index=start; int i; if(start==end) { return index; } for(i=start;i<=end;i++) { if(shortest>=arr[i]) { shortest=arr[i]; index=i; } } return index; } int largestRectangleArea(vector<int> &height) { //wirte your code hero int area=0; int max=0; int height_index=0; for(int i=0;i<height.size();i++) { for(int j=i;j<height.size();j++) { height_index=shortest(height,i,j); area=(j-i+1)*(height[height_index]); if(max < area) max=area; } } return max; }