欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Leetcode84.柱狀圖中最大的矩形(困難)-創(chuàng)新互聯(lián)

一、題目 1、題目描述

給定 n n n 個非負整數(shù),用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

創(chuàng)新互聯(lián)專注于淅川企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,商城網(wǎng)站建設。淅川網(wǎng)站建設公司,為淅川等地區(qū)提供建站服務。全流程定制制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

求在該柱狀圖中,能夠勾勒出來的矩形的大面積。

示例1:

輸入:heights = [2,1,5,6,2,3]
輸出:10
解釋:大的矩形為圖中紅色區(qū)域,面積為 10

示例2:

輸入: heights = [2,4]
輸出: 4
2、基礎框架
class Solution {public:
    int largestRectangleArea(vector& heights) {}
};
3、原題鏈接

84. 柱狀圖中大的矩形

二、解題報告 1、思路分析

例子:
請?zhí)砑訄D片描述
那么大的長方形面積是如下圖中的紅色區(qū)域:
請?zhí)砑訄D片描述
整體思路就是 必須以每個位置的直方圖作為高的長方形能擴多遠,遇到相同的高度時進行錯化處理,最終是能計算正確的。

如何找到以每個位置的直方圖作為高的長方形能擴充的范圍呢?

找到每個位置左右最近的比它矮的直方圖,除了這兩個位置不能到達,其他位置就是它所能擴充的范圍。

2、時間復雜度

O ( n ) O(n) O(n)

3、代碼詳解
  • C++版
//不使用系統(tǒng)stack的解法
class Solution {public:
    int largestRectangleArea(vector& heights) {if (heights.size() == 0) return 0;

        int n = heights.size();

        int _stack[n]; //準備一個棧,此處使用數(shù)組替代系統(tǒng)棧
        memset(_stack, 0, sizeof(_stack));

        int si = -1;

        int ans = 0;

        for (int i = 0; i< n; i++) {while (si != -1 && heights[_stack[si]] >= heights[i]) {//棧不為空 且 棧頂元素對應的值>=當前元素位置對應的值
                int cur = heights[_stack[si--]]; //獲取棧頂位置的直方圖高度
                int left = si == -1 ? -1 : _stack[si]; //找到左邊最近的比棧頂位置直方圖低的位置
                ans = max(ans, (i - left - 1) * cur); //右邊最近的比棧頂位置直方圖低的是i位置
                //所以以cur為高度的長方形能擴充的范圍就是[left + 1, i - 1],寬度為(i - left - 1)
            }
            _stack[++si] = i;
        }

        while (si != -1) {//遍歷完數(shù)組后,棧中還有數(shù)據(jù),則單獨結算
            int cur = heights[_stack[si--]];
            int left = si == -1 ? -1 : _stack[si];
            ans = max(ans, (n - left - 1) * cur);
        }

        return ans;
    }
};
//使用系統(tǒng)stack的解法
class Solution {public:
    int largestRectangleArea(vector& heights) {if (heights.size() == 0) return 0;

        stacksta;
        int area = 0;
        for (int i = 0; i< heights.size(); i++) {while (!sta.empty() && heights[sta.top()] >= heights[i]) {int j = sta.top();
                sta.pop();
                int k = sta.empty() ? -1 : sta.top();
                area = max(area, (i - k - 1) * heights[j]);
            }
            sta.push(i);
        }

        while (!sta.empty()) {int j = sta.top();
            sta.pop();
            int k = sta.empty() ? -1 : sta.top();
            int curArea = (heights.size() - k - 1) * heights[j];
            area = max(area, curArea);
        }
        return area;
    }
};
  • Java 版
public class LargestRectangleInHistogram {//使用系統(tǒng)棧
	public static int largestRectangleArea1(int[] height) {if (height == null || height.length == 0) {	return 0;
		}
		int maxArea = 0;
		Stackstack = new Stack();
		for (int i = 0; i< height.length; i++) {	while (!stack.isEmpty() && height[i]<= height[stack.peek()]) {		int j = stack.pop();
				int k = stack.isEmpty() ? -1 : stack.peek();
				int curArea = (i - k - 1) * height[j];
				maxArea = Math.max(maxArea, curArea);
			}
			stack.push(i);
		}
		while (!stack.isEmpty()) {	int j = stack.pop();
			int k = stack.isEmpty() ? -1 : stack.peek();
			int curArea = (height.length - k - 1) * height[j];
			maxArea = Math.max(maxArea, curArea);
		}
		return maxArea;
	}
	
	//使用數(shù)組替代系統(tǒng)棧
	public static int largestRectangleArea2(int[] height) {if (height == null || height.length == 0) {	return 0;
		}
		int N = height.length;
		int[] stack = new int[N];
		int si = -1;
		int maxArea = 0;
		for (int i = 0; i< height.length; i++) {	while (si != -1 && height[i]<= height[stack[si]]) {		int j = stack[si--];
				int k = si == -1 ? -1 : stack[si];
				int curArea = (i - k - 1) * height[j];
				maxArea = Math.max(maxArea, curArea);
			}
			stack[++si] = i;
		}
		while (si != -1) {	int j = stack[si--];
			int k = si == -1 ? -1 : stack[si];
			int curArea = (height.length - k - 1) * height[j];
			maxArea = Math.max(maxArea, curArea);
		}
		return maxArea;
	}
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁標題:Leetcode84.柱狀圖中最大的矩形(困難)-創(chuàng)新互聯(lián)
文章位置:http://aaarwkj.com/article38/jedsp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站網(wǎng)站營銷、網(wǎng)站設計公司、軟件開發(fā)、網(wǎng)站維護、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
国产精品传媒成人免费| 国产黄片一区二区不卡| 97在线视频这里只有精品| 国产高潮呻吟久久av| 国产区精品福利在线熟女| 丰满人妻中出av在线| 福利视频免费观看欧美| 91色九色吧在线观看| 亚洲国产日韩欧美视频| 国产伦奸在线播放免费| 亚洲性码不卡视频在线| 91欧美日韩中在线视频| 精品国产自在现线拍手机| 中文字幕乱码高清欧美日韩| 青青草成人一区二区三区| 国语自产拍在线观看不卡| 日韩精品电影一二三| 久久久久久亚洲精品少妇| 欧美日韩在线一区2区| 一区二区三区在线观看日韩| 人妻少妇久久中文字幕久久| 真实夫妻露脸爱视频九色网| 日本亚洲中文字幕网站| 一区二区在线视频中文字幕 | 国产精品亚洲av性色| 日日插天天干夜夜操| 亚洲av一区二区三区网站| 国产欧洲日本一区二区| 亚洲男人天堂日本一区| 欧美午夜激情片在线观看| 国产精品三级一区二区三区| 国产福利在线观看网站| 91国产在线视频免费观看| 国产aaa级日本一区二区三区 | 久久精品亚洲av三区麻豆| 后入动漫视频在线观看| 国产精品成人一区二区艾草| 人妻艳情一区二区三区| 久久中文字幕一区二区三区| 亚洲啪啪av一区二区三区| 18禁黄网站免费视频|