标签:Maximal matrix int length best Input LeetCode Rectangle dq
Given a rows x cols
binary matrix
filled with 0
's and 1
's, find the largest rectangle containing only 1
's and return its area.
Example 1:
Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]] Output: 6 Explanation: The maximal rectangle is shown in the above picture.
Example 2:
Input: matrix = [] Output: 0
Example 3:
Input: matrix = [["0"]] Output: 0
Example 4:
Input: matrix = [["1"]] Output: 1
Example 5:
Input: matrix = [["0","0"]] Output: 0
Constraints:
rows == matrix.length
cols == matrix.length
0 <= row, cols <= 200
matrix[i][j]
is'0'
or'1'
.
class Solution { public int maximalRectangle(char[][] matrix) { if(matrix.length == 0) { return 0; } int m = matrix.length, n = matrix[0].length, ans = 0; int[] h = new int[n]; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { h[j] = (matrix[i][j] == '0' ? 0 : h[j] + 1); } ans = Math.max(ans, largestRectangeleHistogram(h)); } return ans; } private int largestRectangeleHistogram(int[] h) { ArrayDeque<Integer> dq = new ArrayDeque<>(); dq.addLast(-1); int best = 0; for(int i = 0; i < h.length; i++) { while(dq.peekLast() >= 0 && h[i] < h[dq.peekLast()]) { int j = dq.pollLast(); best = Math.max(best, h[j] * (i - 1 - dq.peekLast())); } dq.addLast(i); } while(dq.peekLast() >= 0) { int j = dq.pollLast(); best = Math.max(best, h[j] * (h.length - 1 - dq.peekLast())); } return best; } }
Related Problems
Largest Rectangle in Histogram
标签:Maximal,matrix,int,length,best,Input,LeetCode,Rectangle,dq 来源: https://www.cnblogs.com/lz87/p/7395928.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。