【双指针】成最多水的容器

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

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

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

示例 1:

img

 输入:[1,8,6,2,5,4,8,3,7]
 输出:49 
 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
 ​
 //给的数组的值代表的是它的高度 下标就是第几条  找到两个线 让他放水最多 其实就是找围成的最大面积 也就是坐标的x*y最大
 双指针做法的经典题型  因为求面积所以是 选出最短的移动  左右指针  最重要的是什么时候指针移动  直到相遇才结束循环*/
 ​
 //什么时候移动呢 不管怎么移动 它都会减少x的值  那在这个前提下 我让下一个水槽有可能  我说的是有可能变的大  移动短板的话 下一个水槽可能会变大  要是移动长板的话  一定是减少的
 ​
 class Solution {
 public:
     int maxArea(vector<int>& height) {
         int left = 0,right = height.size()-1,sum = 0;
         while(left<right){
             int y = min(height[left],height[right]);//高度一定是看端的 
             int x = right - left;
 ​
             sum = max(sum,y*x);
             if(height[left]<height[right]){
                 left++;
             }else{
                 right--;
             }
         }
         return sum;
     }
 };
 ​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值