@@ -725,62 +725,6 @@ impl Solution {
725725}
726726```
727727
728- Rust
729- 730- 双指针预处理
731- ``` rust
732- 733- impl Solution {
734- pub fn largest_rectangle_area (v : Vec <i32 >) -> i32 {
735- let n = v . len ();
736- let mut left_smaller_idx = vec! [- 1 ; n ];
737- let mut right_smaller_idx = vec! [n as i32 ; n ];
738- for i in 1 .. n {
739- let mut mid = i as i32 - 1 ;
740- while mid >= 0 && v [mid as usize ] >= v [i ] {
741- mid = left_smaller_idx [mid as usize ];
742- }
743- left_smaller_idx [i ] = mid ;
744- }
745- for i in (0 .. n - 1 ). rev () {
746- let mut mid = i + 1 ;
747- while mid < n && v [mid ] >= v [i ] {
748- mid = right_smaller_idx [mid ] as usize ;
749- }
750- right_smaller_idx [i ] = mid as i32 ;
751- }
752- let mut res = 0 ;
753- for (idx , & e ) in v . iter (). enumerate () {
754- res = res . max ((right_smaller_idx [idx ] - left_smaller_idx [idx ] - 1 ) * e );
755- }
756- dbg! (res )
757- }
758- }
759- ```
760- 761- 单调栈
762- ``` rust
763- impl Solution {
764- pub fn largest_rectangle_area1 (mut v : Vec <i32 >) -> i32 {
765- v . insert (0 , 0 ); // 便于使第一个元素能够有左侧<=它的值
766- v . push (0 ); // 便于在结束处理最后一个元素后清空残留在栈中的值
767- let mut res = 0 ;
768- let mut stack = vec! []; // 递增的栈
769- for (idx , & e ) in v . iter (). enumerate () {
770- while ! stack . is_empty () && v [* stack . last (). unwrap ()] > e {
771- let pos = stack . pop (). unwrap ();
772- let prev_pos = * stack . last (). unwrap ();
773- let s = (idx - prev_pos - 1 ) as i32 * v [pos ];
774- res = res . max (s );
775- }
776- stack . push (idx );
777- }
778- res
779- }
780- }
781- ```
782- 783- 784728<p align =" center " >
785729<a href =" https://programmercarl.com/other/kstar.html " target =" _blank " >
786730 <img src =" ../pics/网站星球宣传海报.jpg " width =" 1000 " />
0 commit comments