欢迎光临
我们一直在努力

盛最多水的容器

问题分析:

        给定一个整数数组 height,表示一系列垂直线的高度。需要找到两条线,使得它们与 x 轴构成的容器能够容纳最多的水。容器的水量由两条线之间的距离(宽度)和两条线中较短的高度决定。

解题思路:

        使用双指针法,初始化两个指针 i 和 j 分别指向数组的起始和末尾。计算当前指针位置的水量,并移动较短的一侧的指针,因为移动较长的一侧的指针不会增加水量。

代码实现:

class Solution {
public:
int maxArea(vector<int>& height) {
int i = 0, j = height.size() – 1;
int max_water = 0;
while (i < j) {
int area = (j – i) * min(height[i], height[j]);
max_water = max(area, max_water);
if (height[i] < height[j]) {
i++;
} else {
j–;
}
}
return max_water;
}
};

代码解释:

  • 初始化指针:i 指向数组开头,j 指向数组末尾。
  • 计算水量:当前水量由宽度 (j – i) 和较短的高度 min(height[i], height[j]) 决定。
  • 更新最大水量:比较当前水量和已知的最大水量,更新 max_water。
  • 移动指针:移动较短的一侧的指针,因为移动较长的一侧的指针不会增加水量。
  • 返回结果:遍历结束后返回最大水量。
  • 复杂度分析:

    • 时间复杂度:O(n),只需遍历数组一次。
    • 空间复杂度:O(1),只使用了常数个额外空间。

    示例验证:

    • 示例 1:输入 [1,8,6,2,5,4,8,3,7],输出 49。
    • 示例 2:输入 [1,1],输出 1。
    赞(0)
    未经允许不得转载:171主机测评 » 盛最多水的容器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址