千家信息网

C++如何实现装最多水的容器

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本文小编为大家详细介绍"C++如何实现装最多水的容器",内容详细,步骤清晰,细节处理妥当,希望这篇"C++如何实现装最多水的容器"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
千家信息网最后更新 2025年12月02日C++如何实现装最多水的容器

本文小编为大家详细介绍"C++如何实现装最多水的容器",内容详细,步骤清晰,细节处理妥当,希望这篇"C++如何实现装最多水的容器"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Container With Most Water 装最多水的容器

Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and nis at least 2.

The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.

Example:

Input: [1,8,6,2,5,4,8,3,7]
Output: 49

这道求装最多水的容器的题和那道 Trapping Rain Water 很类似,但又有些不同,那道题让求整个能收集雨水的量,这道只是让求最大的一个的装水量,而且还有一点不同的是,那道题容器边缘不能算在里面,而这道题却可以算,相比较来说还是这道题容易一些,这里需要定义i和j两个指针分别指向数组的左右两端,然后两个指针向中间搜索,每移动一次算一个值和结果比较取较大的,容器装水量的算法是找出左右两个边缘中较小的那个乘以两边缘的距离,代码如下:

C++ 解法一:

class Solution {public:    int maxArea(vector& height) {        int res = 0, i = 0, j = height.size() - 1;        while (i < j) {            res = max(res, min(height[i], height[j]) * (j - i));            height[i] < height[j] ? ++i : --j;        }        return res;    }};

Java 解法一:

public class Solution {    public int maxArea(int[] height) {        int res = 0, i = 0, j = height.length - 1;        while (i < j) {            res = Math.max(res, Math.min(height[i], height[j]) * (j - i));            if (height[i] < height[j]) ++i;            else --j;        }        return res;    }}

这里需要注意的是,由于 Java 中的三元运算符 A?B:C 必须须要有返回值,所以只能用 if..else.. 来替换,不知道 Java 对于三元运算符这么严格的限制的原因是什么。

下面这种方法是对上面的方法进行了小幅度的优化,对于相同的高度们直接移动i和j就行了,不再进行计算容量了,参见代码如下:

C++ 解法二:

class Solution {public:    int maxArea(vector& height) {        int res = 0, i = 0, j = height.size() - 1;        while (i < j) {            int h = min(height[i], height[j]);            res = max(res, h * (j - i));            while (i < j && h == height[i]) ++i;            while (i < j && h == height[j]) --j;        }        return res;    }};

Java 解法二:

public class Solution {    public int maxArea(int[] height) {        int res = 0, i = 0, j = height.length - 1;        while (i < j) {            int h = Math.min(height[i], height[j]);            res = Math.max(res, h * (j - i));            while (i < j && h == height[i]) ++i;            while (i < j && h == height[j]) --j;        }        return res;    }}

读到这里,这篇"C++如何实现装最多水的容器"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

容器 C++ 多水 解法 两个 文章 边缘 不同 代码 内容 指针 方法 水量 运算符 三元 移动 运算 妥当 相同 较大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 s查数据库别名 王者荣耀的服务器网址 药品信息资源常用中文数据库 触摸屏软件开发资质 漫说网络安全文字设计 魔兽世界返回服务器列表 哈工程网络安全学院 温州兴鼎互联网科技 网络安全领域中的补丁 计算算机网络技术专业 服务器管理系统分析 我的世界电脑版网易pvp服务器 合肥招商软件开发岗薪资 数据库求候选吗 北京轨道网络安全360 房地产软件开发有前途吗 网络安全事件追责方式包括 梦幻西游手游雄鹰岭服务器 乌班图安装数据库没有设置密码 车检网络技术服务费用 郸城天气预报软件开发 贵阳星星美创意软件开发服务部 两台服务器间数据是如何同步的 网络安全食品安全交通安全 封锁协议及内容数据库 海力士服务器内存四代 奉贤区特定软件开发服务密度 安康市换热站自动化控制软件开发 惠普服务器优势 福建hp服务器虚拟化系统云空间
0