[leetcode]85.maximalrectangle最大矩形(代码片段)

liuliu5151 liuliu5151     2022-12-15     734

关键词:

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

Example:

Input:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
Output: 6

 

题意

给定一个01矩阵,找出其中全由1构成的最大矩形。

 

思路

将所有1连接的部分看成一个bar height,这个题就可以看成是[leetcode]84. Largest Rectangle in Histogram直方图中的最大矩形

的followup,进行代码复用

 

代码

 1 class Solution 
 2     public int maximalRectangle(char[][] matrix) 
 3        if(matrix.length==0 || matrix[0].length==0) return 0;
 4        int row = matrix.length;
 5         int col = matrix[0].length;
 6         int [] heights = new int[col];
 7         int area = 0;
 8         for(int i = 0; i< row; i++)
 9             for(int j = 0; j< col; j++)
10                 if(matrix[i][j]==‘1‘)
11                     heights[j]++;
12                 else
13                     heights[j]=0;
14                 
15                 
16                  
17            area = Math.max(area,  largestRectangle(heights));
18         
19          return area;     
20     
21     
22     public int largestRectangle(int[] heights )
23         int area = 0;
24         Stack<Integer> s = new Stack<>();
25         for(int i = 0; i<=heights.length;)
26             int value = i<heights.length ? heights[i] : 0;
27             if(s.isEmpty() || value > heights[s.peek()])
28                 s.push(i);
29                 i++;
30             else
31                 int temp = s.pop();
32                 area = Math.max(area, heights[temp]*(s.isEmpty()? i: i-s.peek()-1));
33             // end else 
34         // end for 
35         return area; 
36     
37 

 

leetcode352&leetcode239&leetcode295&leetcode53&leetcode209(代码片段)

lc352DataStreamasDisjointIntervals可以用treemap解key保存interval的start,value保存interval的end。分别找出当前val的lowerKey(treemap中>val的最小key值,没有就返回null)和higherKey(<val的最大key没有就返回null)有以下几种情况:1)当前插入的key... 查看详情

leetcode分类刷题(续2)(代码片段)

leetcode分类刷题1.递归1.1leetcode509斐波拉契数列1.2leetcode206反转链表1.3leetcode344反转字符串2.分治法2.1归并排序2.2leetcode169多数元素2.3leetcode53最大子序和2.4leetcode215数组中k大元素3.回溯法3.1leetcode78子集(模板)3.2leetcode22括号... 查看详情

leetcode分类刷题(代码片段)

leetcode学习笔记Java版1.数组操作1.1leetcode27移除元素1.2leetcode283移动零1.3leetcode485最大连续1的个数2.链表操作2.1leetcode203移除链表元素2.2leetcode206反转链表3.Java队列Queue3.1leetcode933最近的请求次数(仅一道题目)3.2leetcode239滑动... 查看详情

leetcode每日leetcode一题(代码片段)

其实有些算法思路挺有意思的,决定开始刷刷leetcode,先从简单的题开始吧!非最优解,仅记录分享CSDN链接githubleetcode链接文章目录CSDN链接[githubleetcode链接](https://github.com/smileyqp/frontend_book/blob/master/leetcode.md)6.161、 查看详情

leetcode每日leetcode一题(代码片段)

其实有些算法思路挺有意思的,决定开始刷刷leetcode,先从简单的题开始吧!非最优解,仅记录分享CSDN链接githubleetcode链接文章目录CSDN链接[githubleetcode链接](https://github.com/smileyqp/frontend_book/blob/master/leetcode.md)6.161、 查看详情

链表-leetcode2&leetcode23(代码片段)

链表-Leetcode2&Leetcode23githubrepo地址:https://github.com/GoldenaArcher/js_leetcode,Github的目录大概会更新的更勤快一些。2.AddTwoNumbers题目地址:2.AddTwoNumbersAddTwoNumbers题目如下:Youaregiventwonon-em 查看详情

链表-leetcode2&leetcode23(代码片段)

链表-Leetcode2&Leetcode23githubrepo地址:https://github.com/GoldenaArcher/js_leetcode,Github的目录大概会更新的更勤快一些。2.AddTwoNumbers题目地址:2.AddTwoNumbersAddTwoNumbers题目如下:Youaregiventwonon-em 查看详情

leetcode刷题系列之-多数之和类型

...组合问题衍生到背包问题多数之和1.两数之和-力扣(LeetCode)167.两数之和II-输入有序数组-力扣(LeetCode)15.三数之和-力扣(LeetCode)16.最接近的三数之和-力扣(LeetCode)18.四数之和-力扣(LeetCode... 查看详情

leetcode开篇

开天辟地。力扣LeetCode-TheWorld'sLeadingOnlineProgrammingLearningPlatform 查看详情

leetcode开篇

开天辟地。力扣LeetCode-TheWorld'sLeadingOnlineProgrammingLearningPlatform 查看详情

leetcode开篇

开天辟地。力扣LeetCode-TheWorld'sLeadingOnlineProgrammingLearningPlatform 查看详情

leetcode开篇

开天辟地。力扣LeetCode-TheWorld'sLeadingOnlineProgrammingLearningPlatform 查看详情

leetcode开篇

开天辟地。力扣LeetCode-TheWorld'sLeadingOnlineProgrammingLearningPlatform 查看详情

leetcode单链表相关题目汇总

 leetcode-19-RemoveNthFromEndofList—移除链表中倒数第n个元素 leetcode-21-MergeTwoSortedLists—两个已排序链表归并 leetcode-23-MergekSortedLists—k个已排序链表归并 leetcode-24-SwapNodesinPairs&md 查看详情

leetcode分类刷题(续1)(代码片段)

leetcode算法刷题(续)7.树7.1leetcode144二叉树前序遍历7.2leetcode94二叉树中序遍历7.1leetcode145二叉树后序遍历8.堆8.1leetcode215数组中第k个最大元素8.2leetcode692前k个高频单词10.双指针10.1两个数相加为target,返回下标10.2leetcode... 查看详情

leetcode解题记录

尽量抽空刷LeetCode,持续更新刷题记录在github上面,https://github.com/Zering/LeetCode 2016-09-05300.LongestIncreasingSubsequence问题:https://leetcode.com/problems/longest-increasing-subsequence/分析:http://zering.me/20 查看详情

leetcode刷穿二叉树(代码片段)

这里有leetcode题集分类整理!!!专辑完结,欢迎查看本系列文章:leetcode刷穿二叉树(一)leetcode刷穿二叉树(二)leetcode刷穿二叉树(三)leetcode刷穿二叉树(四)leetcode刷穿 查看详情

leetcode刷穿二叉树(代码片段)

这里有leetcode题集分类整理!!!专辑完结,欢迎查看本系列文章:leetcode刷穿二叉树(一)leetcode刷穿二叉树(二)leetcode刷穿二叉树(三)leetcode刷穿二叉树(四)leetcode刷穿 查看详情