11. Container With Most Water(补上周忘记的那份)

来源:互联网 发布:怎样在手机淘宝上评价 编辑:程序博客网 时间:2024/06/16 05:02

Description:

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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 n is at least 2.


简要题解:

先明确一点: 本题中不同容器的储水量可以用容器较短的一条垂直边与底的乘积大小来比较。储水量大小与乘积大小正相关。

算法的思路是: 先选定两条垂线,它们对应的容器底最长。很显然,这两条垂线是第一条和最后一条垂线;接下来,我们不管怎么改动两条垂线,底的长度只可能减小。因为,对于容器的两条垂线,容器的大小只受限于较短的那条,所以,如果我们选择替换较长的那条垂线的话,新容器较短那条垂线的长度<=原容器较短那条垂线的长度。再加上底的长度只可能减小,这样,容器的大小只会变的越来越小。因此,我们应该考虑替换容器的较短那条垂线。候选的垂线就是夹在容器两条垂线中间的那些垂线。我们采用最简单的按序遍历方式尝试寻找新的垂线,即左边的边顺序往前找替换的边,或右边的边顺序往后赵替换的边。


代码:

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


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 云丘山景区旅游 云丘山门票 云丘山一日游价格 云丘山旅游攻略 云丘山在哪里 云丘山好玩吗 云丘山门票多少钱 云丘山图片欣赏 云东海 恒大云东海房价 云东海房价 东海虫的修仙日常 九云屏 露丝茶餐厅 露丝茶餐厅团购 杨羽丝小云 云丝的做法 香菜拌云丝 云丝棉 云丝被多少钱一斤 云丝被 蝉丝被 云丝 云丝是什么 云中君连招 云中君出装 云中君台词 云中君作品 云中君技能 云中君怎么玩以及连招技巧 瑶和云中君是情侣吗 云中君技能详细介绍 云中君配音员 大宋之皇帝系统 云中君 洪荒之万界管理员 云中君 洪荒之云中子证道 云中子异界游李圣人 洪荒之剑修云中子 洪荒之我是云中子 扑到伤不起 洪荒之云中子传奇 万山过客 洪荒之云中子传奇txt下载 洪荒之我是云中子第八区