@@ -396,25 +396,33 @@ function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
396
396
### Rust
397
397
398
398
``` rust
399
+ use std :: collections :: HashMap ;
399
400
impl Solution {
400
401
pub fn next_greater_element (nums1 : Vec <i32 >, nums2 : Vec <i32 >) -> Vec <i32 > {
401
- let mut ans = vec! [- 1 ; nums1 . len ()];
402
- use std :: collections :: HashMap ;
403
- let mut map = HashMap :: new ();
404
- for (idx , & i ) in nums1 . iter (). enumerate () {
405
- map . insert (i , idx );
402
+ let (mut res , mut map ) = (vec! [- 1 ; nums1 . len ()], HashMap :: new ());
403
+ if nums1 . is_empty () {
404
+ return res ;
406
405
}
406
+
407
+ nums1 . into_iter (). enumerate (). for_each (| (v , k )| {
408
+ map . insert (k , v );
409
+ });
410
+
407
411
let mut stack = vec! [];
408
- for (idx , & i ) in nums2 . iter (). enumerate () {
409
- while ! stack . is_empty () && nums2 [* stack . last (). unwrap ()] < i {
410
- let pos = stack . pop (). unwrap ();
411
- if let Some (& jdx ) = map . get (& nums2 [pos ]) {
412
- ans [jdx ] = i ;
412
+ for (i , & value ) in nums2 . iter (). enumerate () {
413
+ while let Some (& top ) = stack . last () {
414
+ if value <= nums2 [top ] {
415
+ break ;
416
+ }
417
+ let stacked_index = stack . pop (). unwrap ();
418
+ if let Some (& mapped_index ) = map . get (& nums2 [stacked_index ]) {
419
+ res [mapped_index ] = value ;
413
420
}
414
421
}
415
- stack . push (idx );
422
+ stack . push (i );
416
423
}
417
- ans
424
+
425
+ res
418
426
}
419
427
}
420
428
```
0 commit comments