摘要:要求一個(gè)矩形的面積,要知道高和寬。如果每次確定高度為然后調(diào)用一個(gè)找到左右邊界,即不小于的最左和最右。這是一個(gè)明顯的算法,每次掃描都會(huì)重走整個(gè)。一個(gè)遞增序列這種,我們知道可以夠成的矩形是會(huì)不斷增大的。遞增序列預(yù)處理,遞減的時(shí)候計(jì)算。
For example, Given heights = [2,1,5,6,2,3], return 10
要求一個(gè)矩形的面積,要知道高和寬。 如果每次確定高度為height[i], 然后調(diào)用一個(gè)helper function找到左右邊界,即不小于height[i]的最左和最右。 這是一個(gè)明顯O(N^2)的算法,每次掃描都會(huì)重走整個(gè)array。 這里有些步驟是不必要的,比如高度為2往左掃的時(shí)候已經(jīng)知道2>1了,然當(dāng)高度為1的時(shí)候,不必往左走,我們可以通過空間來記憶已知信息。 一個(gè)遞增序列156這種,我們知道可以夠成的矩形是會(huì)不斷增大的。而當(dāng)1562,遇到2的時(shí)候矩形可能變小,這時(shí)我們就要計(jì)算面積了。 遞增序列預(yù)處理,遞減的時(shí)候計(jì)算。
用代碼打印出每步的結(jié)果。 height : 0 left :0 right : 1 cur 2 area : 2 height : 3 left :3 right : 4 cur 6 area : 6 height : 2 left :2 right : 4 cur 10 area : 10 height : 5 left :5 right : 6 cur 3 area : 10 height : 4 left :2 right : 6 cur 8 area : 10 height : 1 left :0 right : 6 cur 6 area : 10
public class Solution { public int largestRectangleArea(int[] heights) { Stackstk = new Stack<>(); int area = 0; for(int i=0; i<= heights.length; i++){ int h = i == heights.length ? 0 : heights[i]; if(stk.isEmpty() || h >= heights[stk.peek()]){ stk.push(i); } else { int top = stk.pop(); // 為什么用stk.peek()+1, 因?yàn)檫@里stack里存的可能不連續(xù)。 area = Math.max(area, heights[top]*(stk.isEmpty()? i: i-(stk.peek()+1))); i--; } } return area; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/66942.html
Problem Given n non-negative integers representing the histograms bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. showImg(https://segmentfault.com/img...
摘要:題目要求即找到圖中可以組合而成的面積最大的矩形。從而我們可以知道該矩形在水平方向上的最大擴(kuò)展程度。也就是說,棧中數(shù)據(jù)記錄了最遠(yuǎn)左側(cè)下標(biāo),而當(dāng)前的矩形則是最遠(yuǎn)右側(cè)下標(biāo)。當(dāng)我們不采用數(shù)據(jù)結(jié)構(gòu)時(shí),尋找和計(jì)算的過程需要的時(shí)間復(fù)雜度。 題目要求 Given n non-negative integers representing the histograms bar height where t...
摘要:以此類推,如果一直到棧為空時(shí),說明剛出來的豎條之前的所有豎條都比它自己高,不然不可能棧為空,那我們以左邊全部的寬度作為長(zhǎng)方形的寬度。 Largest Rectangle in Histogram Given n non-negative integers representing the histograms bar height where the width of each bar...
摘要:只要出現(xiàn)當(dāng)前右邊界高度小于等于棧頂元素高度的情況,就取出棧頂元素當(dāng)前遍歷過最高的并對(duì)這個(gè)元素進(jìn)行取最大矩形的運(yùn)算。 Problem Given n non-negative integers representing the histograms bar height where the width of each bar is 1, find the area of largest ...
摘要:而最大的矩形一定滿足兩個(gè)邊界的高度小于該矩形的高度這個(gè)條件如果不滿足的話,邊界也可以被添加進(jìn)來計(jì)算而不破壞矩形的形狀,此時(shí)不為最大,因此找出所有這樣的矩形就一定可以在其中找出面積最大的矩形。 Problem Given n non-negative integers representing the histograms bar height where the width of e...
閱讀 3657·2021-10-12 10:11
閱讀 1021·2021-09-22 15:42
閱讀 3475·2019-08-30 13:06
閱讀 913·2019-08-29 17:05
閱讀 1658·2019-08-29 12:21
閱讀 2386·2019-08-29 11:31
閱讀 1141·2019-08-23 18:37
閱讀 1263·2019-08-23 14:58