leetcode_rust/
next_greater_element_1.rs

1#![allow(dead_code)]
2
3pub fn next_greater_element(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> {
4    use std::collections::HashMap;
5    let mut map: HashMap<i32, i32> = HashMap::new();
6    let mut stack = vec![];
7
8    for num in nums2 {
9        while stack.len() != 0 && stack[stack.len() - 1] < num {
10            map.insert(stack.pop().unwrap(), num);
11        }
12        stack.push(num);
13    }
14
15    let mut rets = vec![];
16    for num in nums1 {
17        match map.get(&num) {
18            Some(next) => rets.push(*next),
19            None => rets.push(-1),
20        }
21    }
22
23    rets
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn test1() {
32        assert_eq!(
33            next_greater_element(vec![4, 1, 2], vec![1, 3, 4, 2]),
34            vec![-1, 3, -1]
35        );
36        assert_eq!(
37            next_greater_element(vec![2, 4], vec![1, 2, 3, 4]),
38            vec![3, -1]
39        );
40    }
41}