Leetcode 85. Maximal Rectangle

博主分享了一种解决难题的策略,将难以理解的dp问题转化为第84题,通过调整代码实现最大矩形区域的查找。文章提供了Java代码实现,并提到没有详细分析复杂度,建议后续复盘时补充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
方法1: 这道题目太难了,超出了我的能力。这道题本应该是dp,但是dp好像很烦,我都没去看。但是我看到了一个还不错的解答,就是把这道题转换为第84题。下面我给出链接,看这个人的评论
在这里插入图片描述
下面展示这种解法的代码,复杂度没分析,没精力了。复盘的时候自己分析复杂度,并且要把dp解答也弄明白。

class Solution {
      public int maximalRectangle(char[][] matrix) {
        if(matrix.length == 0) return 0;  
        int n = matrix[0].length;
        int[] heights = new int[n]; // using a array to reduce counting step of 1
        int max = 0;
        for(char[] row: matrix){
          for(int i = 0; i < n; i++){
            if(row[i] == '1'){
              heights[i] += 1;
            } else {
              heights[i] = 0;
            }
          }

          max = Math.max(max, maxArea(heights)); // go a sub problem of Histogram
        }
        return max;
      }
  
// Exact same solution to Histogram
      public int maxArea(int[] heights){
        Stack<Integer> stack = new Stack();
        int max = 0;
        for(int i = 0; i <= heights.length; i++){
          int h = (i == heights.length) ? 0 : heights[i];
          while(!stack.isEmpty() && heights[stack.peek()] > h){
            int index = stack.pop();
            int leftBound = -1;
            if(!stack.isEmpty()){
               leftBound =  stack.peek();
            }
            max = Math.max(max, heights[index] * (i - leftBound - 1));
          }
          stack.push(i);
        }
        return max;
      }
}

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值