行业资讯
您现在所在的位置:首页>企业动态>行业资讯

力扣题库. 盛最多水的容器

编辑:学到牛牛IT培训    发布日期: 2023-09-26 09:02:36  


题目描述:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

说明:你不能倾斜容器。


1.png


示例 1:


输入:[1,8,6,2,5,4,8,3,7]

输出:49 

解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。


题解思路:

1:使用两个指针,indexLeft和indexRight

2:面积的计算公式Are = high * wide,面积等于高 * 宽

3:计算high = fmin(height[indexRight] , height[indexLeft])

4: 计算wide = indexRight - indexLeft

5:计算出对应的Are与maxAre进行比较并更新maxAre

6: 移动indexRight 与 indexLeft中小的指针


当然也可以使用暴力法,把每个可能性都列举一遍找出最大值并返回,这种是对于大家来说最简单也是最好理解的方法


2.png


完整代码:

int maxArea(int* height, int heightSize)

{

    //暴力法  

    int indexLeft  = 0;  //  左边

    int indexRight = heightSize-1;   // 右边

    int Are = 0;   // 临时存储面积的变量

    int maxAre  = 0;  //  最大面积

    int h    = 0;  // 高

    int moveLeft = 0;

    while(indexLeft < indexRight)

    {

        //取短的一边

        if(height[indexLeft]<=  height[indexRight])

        {

            h = height[indexLeft];

            moveLeft = 1;

        }

        else

        {

            h = height[indexRight];

            moveLeft = 0;

        }

        Are = h *(indexRight - indexLeft);  //  求面积大小

        if(maxAre < Are)  // 每一次面积比较大小 找到最大值

        {

            maxAre = Are;

        }

        if(moveLeft)

{

            indexLeft++;

        }

else

{

            indexRight--;

        }

    }

    return maxAre;

}


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 新闻频道_关注IT技术应用资讯-学到牛牛
    新闻频道_关注IT技术应用资讯-学到牛牛

    扫一扫,免费咨询

  • 新闻频道_关注IT技术应用资讯-学到牛牛
    新闻频道_关注IT技术应用资讯-学到牛牛

    微信公众号

  • 新闻频道_关注IT技术应用资讯-学到牛牛
新闻频道_关注IT技术应用资讯-学到牛牛

学一流技术,找高薪工作

新闻频道_关注IT技术应用资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问