941. Valid Mountain Array

Given an array of integers arr, return true if and only if it is a valid mountain array.

Recall that arr is a mountain array if and only if:

  • arr.length >= 3
  • There exists some i with 0 < i < arr.length - 1 such that:
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

 

Example 1:

Input: arr = [2,1]
Output: false

Example 2:

Input: arr = [3,5,5]
Output: false

Example 3:

Input: arr = [0,3,2,1]
Output: true

 

Constraints:

  • 1 <= arr.length <= 104
  • 0 <= arr[i] <= 104

Rust Solution

struct Solution;

impl Solution {
    fn valid_mountain_array(a: Vec<i32>) -> bool {
        let n = a.len();
        if n < 3 {
            return false;
        }
        let mut i = 0;
        while i + 1 < n && a[i] < a[i + 1] {
            i += 1;
        }
        if i == 0 || i == n - 1 {
            return false;
        }
        while i + 1 < n && a[i] > a[i + 1] {
            i += 1;
        }
        i == n - 1
    }
}

#[test]
fn test() {
    let a = vec![2, 1];
    assert_eq!(Solution::valid_mountain_array(a), false);
    let a = vec![3, 5, 5];
    assert_eq!(Solution::valid_mountain_array(a), false);
    let a = vec![0, 3, 2, 1];
    assert_eq!(Solution::valid_mountain_array(a), true);
}

Having problems with this solution? Click here to submit an issue on github.