Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7aa2a3e

Browse files
Ainevsiajinbudaily
authored andcommitted
Update 0084.柱状图中最大的矩形.md
1 parent f3f549d commit 7aa2a3e

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

‎problems/0084.柱状图中最大的矩形.md‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,61 @@ function largestRectangleArea(heights: number[]): number {
670670
```
671671

672672

673+
Rust
674+
675+
双指针预处理
676+
```rust
677+
678+
impl Solution {
679+
pub fn largest_rectangle_area(v: Vec<i32>) -> i32 {
680+
let n = v.len();
681+
let mut left_smaller_idx = vec![-1; n];
682+
let mut right_smaller_idx = vec![n as i32; n];
683+
for i in 1..n {
684+
let mut mid = i as i32 - 1;
685+
while mid >= 0 && v[mid as usize] >= v[i] {
686+
mid = left_smaller_idx[mid as usize];
687+
}
688+
left_smaller_idx[i] = mid;
689+
}
690+
for i in (0..n-1).rev() {
691+
let mut mid = i + 1;
692+
while mid < n && v[mid] >= v[i] {
693+
mid = right_smaller_idx[mid] as usize;
694+
}
695+
right_smaller_idx[i] = mid as i32;
696+
}
697+
let mut res = 0;
698+
for (idx, &e) in v.iter().enumerate() {
699+
res = res.max((right_smaller_idx[idx] - left_smaller_idx[idx] - 1) * e);
700+
}
701+
dbg!(res)
702+
}
703+
}
704+
```
705+
706+
单调栈
707+
```rust
708+
impl Solution {
709+
pub fn largest_rectangle_area1(mut v: Vec<i32>) -> i32 {
710+
v.insert(0, 0); // 便于使第一个元素能够有左侧<=它的值
711+
v.push(0); // 便于在结束处理最后一个元素后清空残留在栈中的值
712+
let mut res = 0;
713+
let mut stack = vec![]; // 递增的栈
714+
for (idx, &e) in v.iter().enumerate() {
715+
while !stack.is_empty() && v[*stack.last().unwrap()] > e {
716+
let pos = stack.pop().unwrap();
717+
let prev_pos = *stack.last().unwrap();
718+
let s = (idx - prev_pos - 1) as i32 * v[pos];
719+
res = res.max(s);
720+
}
721+
stack.push(idx);
722+
}
723+
res
724+
}
725+
}
726+
```
727+
673728

674729
<p align="center">
675730
<a href="https://programmercarl.com/other/kstar.html" target="_blank">

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /