962. Maximum Width Ramp

Given an array `A` of integers, a ramp is a tuple `(i, j)` for which `i < j` and `A[i] <= A[j]`.  The width of such a ramp is `j - i`.

Find the maximum width of a ramp in `A`.  If one doesn't exist, return 0.

Example 1:

```Input: [6,0,8,2,1,5]
Output: 4
Explanation:
The maximum width ramp is achieved at (i, j) = (1, 5): A = 0 and A = 5.
```

Example 2:

```Input: [9,8,1,0,1,9,4,0,4,1]
Output: 7
Explanation:
The maximum width ramp is achieved at (i, j) = (2, 9): A = 1 and A = 1.
```

Note:

1. `2 <= A.length <= 50000`
2. `0 <= A[i] <= 50000`

962. Maximum Width Ramp
``````struct Solution;

impl Solution {
fn max_width_ramp(a: Vec<i32>) -> i32 {
let mut stack: Vec<usize> = vec![];
let n = a.len();
for i in 0..n {
if let Some(&j) = stack.last() {
if a[i] < a[j] {
stack.push(i);
}
} else {
stack.push(i);
}
}
let mut res = 0;
for i in (0..n).rev() {
while let Some(&j) = stack.last() {
if a[j] <= a[i] {
res = res.max(i - j);
stack.pop();
} else {
break;
}
}
}
res as i32
}
}

#[test]
fn test() {
let a = vec![6, 0, 8, 2, 1, 5];
let res = 4;
assert_eq!(Solution::max_width_ramp(a), res);
let a = vec![9, 8, 1, 0, 1, 9, 4, 0, 4, 1];
let res = 7;
assert_eq!(Solution::max_width_ramp(a), res);
}
``````