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