Update 0496.下一个更大元素I.md 优化 rust

This commit is contained in:
fwqaaq
2023-08-21 16:07:53 +08:00
committed by GitHub
parent 49e1ab2b57
commit 4bd8f3ea32

View File

@ -392,25 +392,33 @@ function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
### Rust ### Rust
```rust ```rust
use std::collections::HashMap;
impl Solution { impl Solution {
pub fn next_greater_element(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> { pub fn next_greater_element(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> {
let mut ans = vec![-1; nums1.len()]; let (mut res, mut map) = (vec![-1; nums1.len()], HashMap::new());
use std::collections::HashMap; if nums1.is_empty() {
let mut map = HashMap::new(); return res;
for (idx, &i) in nums1.iter().enumerate() {
map.insert(i, idx);
} }
nums1.into_iter().enumerate().for_each(|(v, k)| {
map.insert(k, v);
});
let mut stack = vec![]; let mut stack = vec![];
for (idx, &i) in nums2.iter().enumerate() { for (i, &value) in nums2.iter().enumerate() {
while !stack.is_empty() && nums2[*stack.last().unwrap()] < i { while let Some(&top) = stack.last() {
let pos = stack.pop().unwrap(); if value <= nums2[top] {
if let Some(&jdx) = map.get(&nums2[pos]) { break;
ans[jdx] = i; }
let stacked_index = stack.pop().unwrap();
if let Some(&mapped_index) = map.get(&nums2[stacked_index]) {
res[mapped_index] = value;
} }
} }
stack.push(idx); stack.push(i);
} }
ans
res
} }
} }
``` ```