leetcode_rust/
next_greater_element_1.rs1#![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}