0011.盛最多水的容器

方法一:双指针

双指针分别指向数组的首尾,每次移动较短一侧的指针,直到两个指针相遇,同时记录最大面积即可。

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

impl Solution {
    pub fn max_area(height: Vec<i32>) -> i32 {
        use std::cmp::{max, min};
        let mut max_area = 0;
        let (mut left, mut right) = (0, height.len() - 1);
        while left < right {
            let area = ((right - left) as i32) * min(height[left], height[right]);
            max_area = max(max_area, area);
            match height[left] < height[right] {
                true => left += 1,
                false => right -= 1,
            }
        }
        max_area
    }
}