• LeetCode


    题目:

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.

    思路:

    类似于上一篇文章中的方法一,对每列的左右拓展极限进行记录,同时保存当前列的高度。

    package area;
    
    public class MaximalRectangle {
    
        public int maximalRectangle(char[][] matrix) {
            int m;
            int n;
            if (matrix == null || (m = matrix.length) == 0 || (n = matrix[0].length) == 0) return 0;
    // Height of this column
    int[] H = new int[n]; int[] L = new int[n]; int[] R = new int[n]; for (int i = 0; i < n; ++i) { H[i] = 0; L[i] = 0; R[i] = n; } int max = 0; for (int i = 0; i < m; ++i) { int left = 0; int right = n; for (int j = 0; j < n; ++j) { if (matrix[i][j] == '1') { ++H[j]; L[j] = Math.max(L[j], left); } else { left = j + 1; H[j] = 0; L[j] = 0; R[j] = n; } } for (int j = n - 1; j >= 0; --j) { if (matrix[i][j] == '1') { R[j] = Math.min(R[j], right); max = Math.max((R[j] - L[j]) * H[j], max); } else { right = j; } } } return max; } public static void main(String[] args) { // TODO Auto-generated method stub char[][] matrix = { { '0', '1', '1', '0', '1' }, { '1', '1', '0', '1', '0' }, { '0', '1', '1', '1', '0' }, { '1', '1', '1', '1', '0' }, { '1', '1', '1', '1', '1' }, { '0', '0', '0', '0', '0' } }; MaximalRectangle m = new MaximalRectangle(); System.out.println(m.maximalRectangle(matrix)); } }
  • 相关阅读:
    五种线程池的分类与作用
    什么是死锁?
    事务隔离级别区分,未提交读,提交读,可重复读
    共享锁(读锁)和排他锁(写锁)
    java中的成员变量和全局变量的区别
    Algorithm
    6
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/null00/p/5096766.html
Copyright © 2020-2023  润新知