leetcode11 盛最多水的容器

本文介绍了两种计算矩形最大面积的方法。第一种方法是遍历数组,虽然直观但效率低下,可能导致超时。第二种方法采用双指针技术,从数组两端同时开始,根据高度较小的元素移动指针,显著提高了计算速度。这种方法展示了在解决算法问题时如何通过优化策略提升效率。

方法一:最笨的方法  遍历 会超时

class Solution {
public:
    int maxArea(vector<int>& height) {
        if(height.size() == 0 || height.size() == 1)
        {
            return 0;
        }
        else if(height.size() == 2)
        {
            return pow(min(height[0],height[1]),2);
        }
        else
        {
            int max = 0;
            int len = height.size();
            for(int index = 0; index < len-1; index++)
            {
                for(int j = index+1; j<= len-1; j++)
                {
                    long area = 0;
                    area = (j-index)*min(height[index],height[j]);
                    max = (area > max)? area:max;
                }
            }
            return max;
        }

    }
};

方法二:借鉴别人的方法,采用双指针的方法,从数组的两端一起开始,设定max = 0

假设i表示数组的左端 j表示数组的右端, 如果height[i] < height[j]

 i ++  否则 j--。依次计算area。 

class Solution {
public:
    int maxArea(vector<int>& height) {
    int left = 0;
    int right = height.size()-1;
    int max = 0;
    while(left < right)
    {
        if(height[left] < height[right])
        {
            int area = (right - left)* height[left];
            max = (area > max)? area : max;
            left ++;
        }
        else
        {
            int area1 = (right - left)* height[right];
            max = (area1 > max)? area1 : max;
            right--;
        }
    }
    return max;

    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值