leetcode 11. Container With Most Water

本文针对LeetCode上的一道经典算法题目——容器盛水问题进行了详细的解析。通过双指针法,逐步移动较短的边界,寻找能容纳最多水的方案。文章提供了完整的代码实现,并解释了背后的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://leetcode.com/problems/container-with-most-water/

题目:给定n个非负的数a1...an,其中(i,ai)表示x轴为i,y轴为ai;取任意2个点与x轴的垂直线可以组合成一个容器,假设用这些容器来装水,则其中装水最多的容器可装水多少?

思路:这道题要注意理解题意,两个线的中间不管有没有更小的线,都是取两个线中小的那根为高。

所以假设选取i,j(j>i)的两根垂线,则装水面积为area=min(heigth[i],height[j])(j-i);

假设height[i]<height[j],想要装更多的水,只能是i++;因为i为短的那根,只有i移动才可能增加高度。

所以每次短的那根移动,才有可能装水面积更多。

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

 

转载于:https://www.cnblogs.com/aiheshan/p/5812383.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值