您的位置:首页 > 财经 > 产业 > 南昌高端模板建站_建筑业服务平台_网站设计公司有哪些_关键词挖掘啊爱站网

南昌高端模板建站_建筑业服务平台_网站设计公司有哪些_关键词挖掘啊爱站网

2025/6/7 18:45:40 来源:https://blog.csdn.net/qq_40926675/article/details/142796451  浏览:    关键词:南昌高端模板建站_建筑业服务平台_网站设计公司有哪些_关键词挖掘啊爱站网
南昌高端模板建站_建筑业服务平台_网站设计公司有哪些_关键词挖掘啊爱站网

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

思路

  1. 双指针法

    • 使用两个指针:一个指向数组的开始(左边),一个指向数组的结束(右边)。
    • 每次计算由当前两个指针所形成的水面积,面积的计算公式为:

    • 然后根据柱子的高度,决定移动哪一个指针:
      • 如果 height[i] < height[j],则移动左指针 i 向右;这样可能会找到更高的柱子。
      • 如果 height[j] ≤ height[i],则移动右指针 j 向左;同样可能会找到更高的柱子。
    • 继续这个过程,直到两个指针相遇。
  2. 计算最大面积

    • 在每次移动指针时,更新当前的最大水面积。

复杂度分析

  1. 时间复杂度

    • 在最坏情况下,每个指针最多遍历整个数组一次,因此时间复杂度为 O(n)其中 n 是数组 height 的长度。
  2. 空间复杂度

    • 只使用了常量数量的额外空间来存储指针和最大水面积的值,因此空间复杂度为 O(1)。

代码

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com