Changes: - Removed all Java code implementations - Kept only Go language solutions - Renamed "## Go 解法" to "## 解法" - Removed "### Go 代码要点" sections - Cleaned up duplicate headers and empty sections - Streamlined documentation for better readability Updated files (9): - 三数之和.md - 两数相加.md - 无重复字符的最长子串.md - 最长回文子串.md - 括号生成.md - 子集.md - 单词搜索.md - 电话号码的字母组合.md - 柱状图中最大的矩形.md All 22 LeetCode Hot 100 Medium problems now use Go exclusively. Code is cleaner, more focused, and easier to follow. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
57 lines
1.1 KiB
Markdown
57 lines
1.1 KiB
Markdown
# 柱状图中最大的矩形 (Largest Rectangle in Histogram)
|
|
|
|
## 题目描述
|
|
|
|
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。
|
|
|
|
求在该柱状图中,能够勾勒出来的矩形的最大面积。
|
|
|
|
## 解题思路
|
|
|
|
### 方法一:单调栈(推荐)
|
|
|
|
**核心思想:**使用单调递增栈,存储柱子的索引。当遇到比栈顶小的柱子时,弹出栈顶并计算面积。
|
|
|
|
## 代码实现
|
|
|
|
### Go 实现
|
|
|
|
```go
|
|
package main
|
|
|
|
func largestRectangleArea(heights []int) int {
|
|
stack := []int{}
|
|
maxArea := 0
|
|
n := len(heights)
|
|
|
|
for i := 0; i <= n; i++ {
|
|
h := 0
|
|
if i < n {
|
|
h = heights[i]
|
|
}
|
|
|
|
for len(stack) > 0 && h < heights[stack[len(stack)-1]] {
|
|
height := heights[stack[len(stack)-1]]
|
|
stack = stack[:len(stack)-1]
|
|
|
|
width := i
|
|
if len(stack) > 0 {
|
|
width = i - stack[len(stack)-1] - 1
|
|
}
|
|
|
|
area := height * width
|
|
if area > maxArea {
|
|
maxArea = area
|
|
}
|
|
}
|
|
|
|
stack = append(stack, i)
|
|
}
|
|
|
|
return maxArea
|
|
}
|
|
```
|
|
|
|
- LeetCode 85: 最大矩形(二维版本)
|
|
- LeetCode 42: 接雨水
|