列表

详情


BM93. 盛水最多的容器

描述

给定一个数组height,长度为n,每个数代表坐标轴中的一个点的高度,height[i]是在第i点的高度,请问,从中选2个高度与x轴组成的容器最多能容纳多少水
1.你不能倾斜容器
2.当n小于2时,视为不能形成容器,请返回0
3.数据保证能容纳最多的水不会超过整形范围,即不会超过231-1

数据范围:


如输入的height为[1,7,3,2,4,5,8,2,7],那么如下图:


示例1

输入:

[1,7,3,2,4,5,8,2,7]

输出:

49

示例2

输入:

[2,2]

输出:

2

示例3

输入:

[5,4,3,2,1,5]

输出:

25

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 11ms, 内存消耗: 2980KB, 提交时间: 2022-07-24

static const auto io_sync_off = []()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param height int整型vector 
     * @return int整型
     */
    int maxArea(vector<int>& height) 
    {
        // write code here
       if(height.size() < 2)
        {
            return 0;
        }
        int res = 0;
        int left = 0;
        int right = height.size() - 1;
        while(left <= right)
        {
            int p = height[left];
            int n = height[right];
            int sum = min(p , n) * (right - left);
            res = max(res, sum);
            if(p > n)
            {
                --right;
            }
            else
            {
                ++left;
            }
        }
        return res; 
    }
};

C++ 解法, 执行用时: 11ms, 内存消耗: 3080KB, 提交时间: 2022-07-24

static const auto io_sync_off = []()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    return 0;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param height int整型vector 
     * @return int整型
     */
    int maxArea(vector<int>& height) 
    {
        // write code here
       if(height.size() < 2)
        {
            return 0;
        }
        int res = 0;
        int left = 0;
        int right = height.size() - 1;
        while(left <= right)
        {
            int p = height[left];
            int n = height[right];
            int sum = min(p , n) * (right - left);
            res = max(res, sum);
            if(p > n)
            {
                --right;
            }
            else
            {
                ++left;
            }
        }
        return res; 
    }
};

C++ 解法, 执行用时: 11ms, 内存消耗: 3080KB, 提交时间: 2022-06-29

static const auto io_sync_off = []()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	return nullptr;
}();
class Solution {
public:
	/**
	 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
	 *
	 *
	 * @param height int整型vector
	 * @return int整型
	 */
	int maxArea(vector<int>& height) {
		int left = 0;
		int right = height.size() - 1;
		int maxArea = 0;
		int curMinHeight;
		int width;
		while (left<right)
		{
			width = right - left;
			if (height[left] < height[right])
			{
				curMinHeight = height[left];
				++left;
			}
			else
			{
				curMinHeight = height[right];
				--right;
			}
			maxArea = max(maxArea, curMinHeight*width);
		}
		return maxArea;
	}
};

C++ 解法, 执行用时: 11ms, 内存消耗: 3620KB, 提交时间: 2022-07-04

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param height int整型vector 
     * @return int整型
     */
    int maxArea(vector<int>& height) {
        int n = height.size();
        if(n < 2) return 0;
        int left = 0;
        int right = n - 1;
        int area = 0;
        int ans;
        while(left < right){
            area = std::min(height[left], height[right]) * (right - left);
            ans = std::max(ans, area);
            if(height[left] <= height[right]){
                ++left;
            }else{
                --right;
            }
        }
        return ans;
    }
};
static const auto io_sync_off=[]()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();

C++ 解法, 执行用时: 12ms, 内存消耗: 2964KB, 提交时间: 2022-06-24

static const auto io_sync_off = []()
{
    std::ios::sync_with_stdio(false);//关闭输入输出
    std::cin.tie(nullptr);//取消两个stream绑定
    std::cout.tie(nullptr);//取消cin 和 cout之间的绑定,加快执行效率
    return nullptr;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param height int整型vector
     * @return int整型
     */
    int maxArea(vector<int>& height) {
        if (height.size() < 2)
            return 0;
        int left = 0, right = height.size() - 1;
        int tem = 0;
        int ans = 0;
        while (left<right)
        {
            tem = min(height[left], height[right]) * (right - left);
            ans = max(ans, tem);
            if (height[left] <= height[right])
                left++;
            else
                right--;
        }
        return ans;
    }
};

上一题