fn next_greater_elems(array: &[T]) -> Box<[Option]> { let array_len = array.len(); let mut stack = Vec::::with_capacity(array_len); let mut result = Vec::>::with_capacity(array_len); stack.push(0); result.push(None); for (index, element) in array.iter().enumerate().skip(1) { result.push(None); // Use "<=" for "Greater-Equal" while let Some(&stack_index) = stack.last().filter(|&&idx| array[idx] < *element) { result[stack_index] = Some(*element); stack.pop(); } stack.push(index); } result.into_boxed_slice() }