語音計算矩形面積 LeetCode85 最大矩形

2021-10-14 21:41:48 字數 2634 閱讀 4745

今天在製作書籤的時候

突然想到了乙個問題

如果要送給未來的女朋友乙個書籤

上面該寫些什麼話

哈哈哈哈哈哈哈哈哈

the spring is coming!

想了一會兒,覺得這句話最合適

to ***:

天使的笑,燦爛的心!!!

哎,還是先找個女朋友再說吧!

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。

示例:

輸入:

[ ["1","0","1","0","0"],

["1","0","1","1","1"],

["1","1","1","1","1"],

["1","0","0","1","0"]

]輸出: 6

思路:這一題剛開始我一直以為得通過動態規劃方法才能解決,想了許久還是沒能解決便就此作罷,然後看了網上大佬的講解,才發現還有另外一種很巧妙的方法可以解決。說實話,讓我撓破腦皮也想不出來!關鍵就是:首先根據給定的matrix矩陣來更新每個元素的值,規則是:以該節點為起始點按列搜尋,計算值連續為1的數目。這一步預處理也是最最最核心的一步,如下圖所示:

第一步預處理完成了,接下來的工作就很簡單了。只需要依次遍歷新矩陣中每一行的元素,按照上述規則計算最大矩形面積。其實細心的讀者此時就會發現求每一行元素所能構成的矩形的最大面積,這不就跟第84題柱狀圖中最大的矩形一樣麼?對此題不熟悉的讀者可以參考我的上篇文章:

程小新同學:leetcode84-柱狀圖中最大的矩形​zhuanlan.zhihu.com

**如下:

class solution(object):

# 本題其實是變形的84題-柱狀圖中最大的矩形

def maximalrectangle(self, matrix):

""":type matrix: list[list[str]]

:rtype: int

"""# 首先根據給定的matrix矩陣來更新每個元素的值,規則是:以該節點為起始點按列搜尋,計算值連續為1的數目

for row in range(len(matrix)):

for col in range(len(matrix[0])):

index = row

# 用來儲存從[row][col]節點開始往下值連續為1的數目

height = 0

while index < len(matrix):

if matrix[index][col] == "1":

height += 1

else:

break

index += 1

matrix[row][col] = height

# 定義該矩陣內構成的最大面積

max_area = 0

# 遍歷每一行使用第84題的方法來更新最大面積

for row in matrix:

max_area = max(max_area, self.get_max_area(row))

return max_area

# 獲取每一行對應的柱狀圖中最大矩形面積

def get_max_area(self, heights):

i = 0

max_value = 0

stack =

while i < len(heights):

if len(stack) == 0 or heights[stack[-1]] <= heights[i]:

i += 1

else:

now_idx = stack.pop()

if len(stack) == 0:

max_value = max(max_value, i * heights[now_idx])

else:

max_value = max(max_value, (i - stack[-1] - 1) * heights[now_idx])

return max_value

if __name__ == "__main__":

matrix = [["1", "0", "1", "0", "0"], ["1", "0", "1", "1", "1"], ["1", "1", "1", "1", "1"], ["1", "0", "0", "1", "0"]]

max_area = solution().maximalrectangle(matrix)

print(max_area)

不過執行效率依舊不高,在10%左右。

語音計算矩形面積 如何計算廣義球面矩形的面積

如圖,dc為赤道上的圓弧,ab為緯線上的圓弧,兩個平面 和 分別通過兩極切割球面,形成割線ad和bc,顯然,dc ad bc皆為大圓弧。我們稱四邊形abcd為廣義球面矩形。這個矩形的面積如何計算呢?用矩形在緯度線上的弧長與 的乘積,然後求和就可以得到矩形的面積,也就是 s cos d sin c 1...

語音計算矩形面積 兩道最大矩形的單調棧解法

leetcode 84.柱狀圖中最大的矩形 題目描述 給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 2,1,5,6,2,3 圖中陰影部分為所能勾勒出的最大...

使用類計算矩形的面積

定義並實現乙個矩形類,有長和寬兩個屬性,由成員函式計算矩形的面積。矩形類rectang介面定義如下 class rectangle 請實現rectangle類的成員函式。裁判測試程式樣例 include using namespace std class rectangle int main 你的 ...