日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

算法:柱状图中最大矩形

發布時間:2025/6/15 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法:柱状图中最大矩形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?題目要求

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度,并且每個柱子彼此相鄰,且寬度為 1 。求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

  • 以下是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。
  • 圖中陰影部分為所能勾勒出的最大矩形面積,其面積為 10 個單位。如下:

  • 示例:
輸入: [2,1,5,6,2,3]輸出: 10 //柱狀圖中最大矩形//枚舉寬,固定一邊枚舉另一邊,然后計算面積 class Solution { public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();int ans = 0;// 枚舉左邊界for (int left = 0; left < n; ++left) {int minHeight = INT_MAX;// 枚舉右邊界for (int right = left; right < n; ++right) {// 確定高度minHeight = min(minHeight, heights[right]);// 計算面積ans = max(ans, (right - left + 1) * minHeight);}}return ans;} };//枚舉高 class Solution { public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();int ans = 0;for (int mid = 0; mid < n; ++mid) {// 枚舉高int height = heights[mid];int left = mid, right = mid;// 確定左邊界,取左邊界最高的那個while (left - 1 >= 0 && heights[left - 1] >= height) {--left;}// 確定右邊界,取右邊界最高的那個while (right + 1 < n && heights[right + 1] >= height) {++right;}// 計算面積ans = max(ans, (right - left + 1) * height);}return ans;} };//單調棧 func largestRectangleArea(heights []int) int {n := len(heights)left, right := make([]int, n), make([]int, n)//棧mono_stack := []int{}//取左邊的第一個小于當前的for i := 0; i < n; i++ {//棧頂元素大于或等于當前元素就出棧for len(mono_stack) > 0 && heights[mono_stack[len(mono_stack)-1]] >= heights[i] {//出棧mono_stack = mono_stack[:len(mono_stack)-1]}if len(mono_stack) == 0 {left[i] = -1} else {left[i] = mono_stack[len(mono_stack)-1]}mono_stack = append(mono_stack, i)}//取右邊的第一個小于當前的mono_stack = []int{}for i := n - 1; i >= 0; i-- {//棧頂元素大于或等于當前元素就出棧for len(mono_stack) > 0 && heights[mono_stack[len(mono_stack)-1]] >= heights[i] {//出棧mono_stack = mono_stack[:len(mono_stack)-1]}if len(mono_stack) == 0 {right[i] = n} else {right[i] = mono_stack[len(mono_stack)-1]}mono_stack = append(mono_stack, i)}ans := 0for i := 0; i < n; i++ {ans = max(ans, (right[i] - left[i] - 1) * heights[i])}return ans }func max(x, y int) int {if x > y {return x}return y }

?

總結

以上是生活随笔為你收集整理的算法:柱状图中最大矩形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。