做公司网站需要多建设云个人服务平台登录入口
2026/1/29 0:53:45 网站建设 项目流程
做公司网站需要多,建设云个人服务平台登录入口,网站上的flash怎么做的,制作商务网站题目链接#xff1a;85. 最大矩形#xff08;困难#xff09; 算法原理#xff1a; 博主声明#xff1a;这84题和85题感谢灵神#x1f339;#x1f339;#x1f339;的启发#xff0c;我在灵神的思路上产生自己的想法#xff0c;因此自己纯手敲了一遍#xff0c;写博…题目链接85. 最大矩形困难算法原理博主声明这84题和85题感谢灵神的启发我在灵神的思路上产生自己的想法因此自己纯手敲了一遍写博客分享于此~解法直接用84题的代码解决2ms击败100.00%时间复杂度O(MN)这题就是84题的进阶版大家可以先看看我的84题博客回过头再看这题就超easyA.每日一题——84. 柱状图中最大的矩形对于此题假设矩阵一共m行咱枚举矩形的底边做m次84题即可以第一行为底的柱子高度[1,0,1,0,0]最大矩形面积1以第二行为底的柱子高度[2,0,2,1,1]最大矩形面积3以第三行为底的柱子高度[3,1,3,2,2]最大矩形面积6以第四行为底的柱子高度[4,0,0,3,0]最大矩形面积4最终结果就是max(1,3,6,4)6Java代码class Solution { public int maximalRectangle(char[][] matrix) { int nmatrix[0].length; //这里申请n1个空间大小是因为84题的代码涉及到了rightn的情况为了避免越界访问所以初始化成为n1 //实际上初始化成n也可以因为rightn时会直接赋值h-1完全不访问height[n] int[] heightsnew int[n1]; int ret0; for(char[] row:matrix){ //计算底边为row的柱子高度 for(int j0;jn;j){ if(row[j]0) heights[j]0; else heights[j]; } //直接调用84题代码 retMath.max(ret,largestRectangleArea(heights)); } return ret; } //直接把84题的代码原封不动搬过来用 private int largestRectangleArea(int[] heights) { int nheights.length; int[] stnew int[n1]; //当栈中只有一个数的时候栈顶下面的数是-1对应left[i]-1的情况 int top-1;//记录栈顶下标初始为-1表示栈为空 //初始化栈底为-1对应left-1的情况 st[top]-1; int ret0; //遍历范围[0,n]:n是right的边界对应rightn的情况 for(int right0;rightn;right){ int hrightn?heights[right]:-1; //top0:保证栈内除了-1还有有效元素 while(top0heights[st[top]]h){ //弹出栈顶元素i这是当前要计算面积的柱子下标 int ist[top--]; //弹出后的栈顶就是i紧接着左侧的第一个更矮柱子下标 int leftst[top]; retMath.max(ret,heights[i]*(right-left-1)); } //将当前right压入栈维持栈的单调递增性质 //因为此时咱们的基准柱子变成了从栈中弹出来的柱子比基准柱子小的两个都去当left和right了比它大的才放进去所以是递增的 st[top]right; } return ret; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询