diff --git "a/problems/0084.346円237円261円347円212円266円345円233円276円344円270円255円346円234円200円345円244円247円347円232円204円347円237円251円345円275円242円.md" "b/problems/0084.346円237円261円347円212円266円345円233円276円344円270円255円346円234円200円345円244円247円347円232円204円347円237円251円345円275円242円.md" index 9b76229af0..9fb6a6b061 100644 --- "a/problems/0084.346円237円261円347円212円266円345円233円276円344円270円255円346円234円200円345円244円247円347円232円204円347円237円251円345円275円242円.md" +++ "b/problems/0084.346円237円261円347円212円266円345円233円276円344円270円255円346円234円200円345円244円247円347円232円204円347円237円251円345円275円242円.md" @@ -725,62 +725,6 @@ impl Solution { } ``` -Rust - -双指针预处理 -```rust - -impl Solution { - pub fn largest_rectangle_area(v: Vec) -> 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 { - 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 - } -} -``` - -

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