题目:来源于LeetCode

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

代码:

暴力解法,把每两个木板之间的容积都算出来进行比较。但是因为太过于占用内存和浪费时间,官方没有给通过。

class Solution {public:int minH(int a,int b){if(a<b)return a;else return b;}int area(int a,int b,int c){return a*(b-c);}int maxArea(vector<int>& height) {//首先要确定容积和什么有关。越往里面找,底面积越小,想要容积增加就需要高变大。auto beg=height.begin(),end =height.end();int h_left = *beg;int h_right = *(end-1);int Area =minH(h_left,h_right)*(end-beg-1);//作为初始默认最大面积//暴力算法就是让他直接比面积大小for(int i=0;i!=end-beg-1;++i)for(int j=i+1;j!=end-beg;++j){int NewArea=area(minH(height[i],height[j]),j,i);if(NewArea>Area)Area = NewArea;            }return Area;}
};

官方示例:

class Solution {public:int maxArea(vector<int>& height) {int l = 0, r = height.size() - 1;int ans = 0;while (l < r) {int area = min(height[l], height[r]) * (r - l);ans = max(ans, area);if (height[l] <= height[r]) {++l;}else {--r;}}return ans;}
};

总结:

暴力解法虽然能完成任务,但是太浪费内存和时间。
官方用的是双指针的形式,确实很厉害,之前根本就没有考虑过。而且仔细思考之后,发现,的确不断舍弃短的木板向内移动,确实可行。不会出现漏掉最大值的情况。

十一、盛水最多的容器相关推荐

  1. 力扣--盛水最多的容器

    题目: 给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条 ...

  2. LeetCode 11盛水最多的容器12整数转罗马数字

    目录 盛水最多的容器 题目描述 分析 整数转罗马数字 题目描述: 分析 结语 盛水最多的容器 公众号:bigsai,回复进群加入打卡,回复bigsai获取3GB的pdf资源.点赞再看,养成习惯! 题目 ...

  3. Container with most water(盛水最多的容器)

    Container with most water(盛水最多的容器) 简单的证明 如图 题目: 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n ...

  4. Leetcode:11.container-with-most-water(盛水最多的容器)

    一开始直接想用暴力法加剪枝擦边通过的,没想到还是超时了: 谁知道最后输入从1-15000一共15000个数据,吓坏! 题解中得知双指针实现O(n),真的学到了,羡慕这些大佬的智商: 借鉴大佬题解:对O ...

  5. leecode11 盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  6. Leetcode--11. 盛水最多的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  7. 牛客在线编程101-93 盛水最多的容器

    描述 给定一个数组height,长度为n,每个数代表坐标轴中的一个点的高度,height[i]是在第i点的高度,请问,从中选2个高度与x轴组成的容器最多能容纳多少水 1.你不能倾斜容器 2.当n小于2 ...

  8. 力扣:11盛水最多的容器

    class Solution:def maxArea(self, height: List[int]) -> int:i, j, res = 0, len(height) - 1, 0while ...

  9. Leetcode题库 11.盛水最多的容器(双指针法 C实现)

    文章目录 解析 思路 原理 代码 写法1 写法2 解析 p_0:左"指针" p_1:右"指针" Area:当前双"指针"代表面积大小 ret ...

最新文章

  1. 基于Kotlin实现的GankIo客户端
  2. pgd 游戏教程 基地
  3. 用 State Pattern 来实现一个简单的 状态机
  4. [Project Euler] 来做欧拉项目练习题吧: 题目013
  5. c+ 引用传递坑_了解C ++中的引用传递
  6. LeetCode之根据字符出现频率排序
  7. microsoft visual c++与microsoft visual net 版本对应关系
  8. Java学生管理系统项目
  9. endnote修改正文中参考文献标注_Endnote之文献标注
  10. 净资产收益率ROE连续3年超过15%的股票排名
  11. 易企秀手机html5场景源码,仿易企秀V15.1手机网页DIY制作工具完整版开源版源码修复采......
  12. iOS 定位服务编程详解
  13. 信息收集之主动信息收集(一)
  14. 大数据生态(六)zookeeper集群部署(Linux和Windows[含一键启动脚本])
  15. KB/S MBPS转换
  16. 我的物联网项目(二十九) 线上前期运营
  17. Java Grammer:数据类型
  18. RHCSA第四天学习内容心得
  19. 【强化学习论文】Decision Transformer:通过序列建模进行强化学习
  20. 驾照 科目二评判标准

热门文章

  1. 量化交易之python基础篇 - 常规异常处理、在函数中主动抛出异常
  2. 深度学习之“制作自定义数据”--torch.utils.data.DataLoader重写构造方法。
  3. Delphi调用外部程序函数详解
  4. java处理json字符串_常见java对象转换为json字符串处理!!!
  5. 那些年我们在一线背锅的日子- 运维经理手记
  6. java ajax找回密码,Java之AjaxAjax异步校验用户名
  7. java序列化如何实现_什么是java序列化,如何实现java序列化
  8. (2019)通过机器学习从建筑物中的Wi-Fi数据推断居住人数
  9. java共识算法_PBFT共识算法详细分析及Java实现
  10. 真无线什么品牌适合玩游戏?2021新款低延迟游戏专业蓝牙耳机推荐