mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
Merge pull request #2241 from fwqaaq/master-2
Update 0496.下一个更大元素I.md 优化 rust
This commit is contained in:
@ -396,25 +396,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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user