11.盛水最多的容器

11. 盛最多水的容器
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49

想法1:暴力解法
1.二维数组res[x][y]表示第x个元素与第y个元素组成容器的容量
2.res[x][y]=min(height[x],height[y])*(|x-y|)
3.去res数组的最大值。

代码:
class Solution {
public:
    int maxArea(vector<int>& height) {
        int len = height.size() ;
        int res = 0 ;
        // int x = 0 ;
        for (int i = 0 ; i < len ; i++)
            for (int j = i+1 ; j < len ; j++){
                int x = height[i] < height[j] ? height[i] : height[j] ;
                x = x*(j - i) ;
                if (x>res){
                    // cout<<x<<"  "<<j<<"  "<<i<<endl ;
                    res = x ;
                }
            }
        return res ;

    }
};

题解:双指针法
1.设置收尾指针h和r 并计算h和r位置元素构成矩形的面积;
2.移动较小的元素指针,并计算h和r位置元素构成矩形的面积;
3.循环上述操作至h = r 并更新最大面积;

代码:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int h = 0 ; 
        int r = height.size() - 1 ;
        int res = 0 ;
        while (h != r){
            int x = height[h] > height[r] ? height[r] : height[h] ;
            x = x * (r - h );
            if (res < x){
                res = x ;
            }
            height[h] > height[r] ? r-- : h++ ;
        }
        return res ;
    }
};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值