刷题笔记 day3

力扣   11 盛水最多的容器

 解法:使用对撞指针解题。

思路: 定义两个指针 left(指向数组首端)和 right(指向数组尾部),来计算其容积;

让对应数值较小的指针移动一步,再次求其容积;直至两个指针相遇,从其求得容积中找出最大值就是本题要求的结果。

本题代码使用封装的函数和不使用封装函数的解法。

1. 使用封装的函数的解法:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size()-1,maxv = 0;
        while(left < right)
        {
            //求所在区间的相应容积
            int v = min(height[left],height[right]) * (right-left);
            //更新最大容积
            maxv = max(maxv,v);
            //更新指针位置
            if(height[left] <= height[right])
            {
                ++left;
            }else{
                --right;
            }
        }
        return maxv;
    }
};

2. 不使用封装函数的解法

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size()-1,maxv = 0,minHeight = 0;
        while(left < right)
        {
            //找出最低高度
            if(height[left] < height[right])
            {
                minHeight = height[left];
            }else{
                minHeight = height[right];
            }
           //确定空间长度
           int  len  = right - left;
            //求所在区间的相应容积
            int v = minHeight * len;
            //更新最大容积
            if(maxv < v)
            {
                maxv = v;
            }
            //更新指针位置
            if(height[left] <= height[right])
            {
                ++left;
            }else{
                --right;
            }
        }
        return maxv;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_56534464/article/details/132031505