mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Update 0084.柱状图中最大的矩形.md 代码重复
This commit is contained in:
@ -725,62 +725,6 @@ impl Solution {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Rust
|
|
||||||
|
|
||||||
双指针预处理
|
|
||||||
```rust
|
|
||||||
|
|
||||||
impl Solution {
|
|
||||||
pub fn largest_rectangle_area(v: Vec<i32>) -> i32 {
|
|
||||||
let n = v.len();
|
|
||||||
let mut left_smaller_idx = vec![-1; n];
|
|
||||||
let mut right_smaller_idx = vec![n as i32; n];
|
|
||||||
for i in 1..n {
|
|
||||||
let mut mid = i as i32 - 1;
|
|
||||||
while mid >= 0 && v[mid as usize] >= v[i] {
|
|
||||||
mid = left_smaller_idx[mid as usize];
|
|
||||||
}
|
|
||||||
left_smaller_idx[i] = mid;
|
|
||||||
}
|
|
||||||
for i in (0..n-1).rev() {
|
|
||||||
let mut mid = i + 1;
|
|
||||||
while mid < n && v[mid] >= v[i] {
|
|
||||||
mid = right_smaller_idx[mid] as usize;
|
|
||||||
}
|
|
||||||
right_smaller_idx[i] = mid as i32;
|
|
||||||
}
|
|
||||||
let mut res = 0;
|
|
||||||
for (idx, &e) in v.iter().enumerate() {
|
|
||||||
res = res.max((right_smaller_idx[idx] - left_smaller_idx[idx] - 1) * e);
|
|
||||||
}
|
|
||||||
dbg!(res)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
单调栈
|
|
||||||
```rust
|
|
||||||
impl Solution {
|
|
||||||
pub fn largest_rectangle_area1(mut v: Vec<i32>) -> i32 {
|
|
||||||
v.insert(0, 0); // 便于使第一个元素能够有左侧<=它的值
|
|
||||||
v.push(0); // 便于在结束处理最后一个元素后清空残留在栈中的值
|
|
||||||
let mut res = 0;
|
|
||||||
let mut stack = vec![]; // 递增的栈
|
|
||||||
for (idx, &e) in v.iter().enumerate() {
|
|
||||||
while !stack.is_empty() && v[*stack.last().unwrap()] > e {
|
|
||||||
let pos = stack.pop().unwrap();
|
|
||||||
let prev_pos = *stack.last().unwrap();
|
|
||||||
let s = (idx - prev_pos - 1) as i32 * v[pos];
|
|
||||||
res = res.max(s);
|
|
||||||
}
|
|
||||||
stack.push(idx);
|
|
||||||
}
|
|
||||||
res
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||||
|
Reference in New Issue
Block a user