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
}
}