Container with most water(盛水最多的容器) 简单的证明

如图

题目: 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

解答思路: 题目大致意思从中选出两个坐标,使其和x轴组成的容器的容量最大。
1:暴力遍历:使用双循环遍历。这里不做介绍。
2: 双指针法:以上图为例,一指针left位于首位,另一right在末尾。如果left(对应的值)<right(对应的值),left+1,否则right-1,以此方法循环直到right=left停止。
简单的解释(证明):现在只要证明最大值在此循环当中,就说明此方法正确。
设在一次循环中:容积=left*(right-left),如果left的对应值小于right对应的值,那么,容易知道left与left和right之间任何一个数组成的容积都小于left*(right-left),并且right右边的数与left组成的容器的值也一定小于某个值,所以left没有再和其他木板组成容器的必要,所以i++;相当于舍弃了left与其他所有木板(除了right)的计算。但是我们可以知道舍弃的计算和我们循环不会遗漏任何情况,并且舍弃的值都是较小的值,所以这种循环一定会找到最大值。

java代码实现:

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

Container with most water(盛水最多的容器)相关推荐

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

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

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

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

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

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

  4. 十一、盛水最多的容器

    题目:来源于LeetCode 给定一个长度为 n 的整数数组 height .有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) . 找出其中的两条线,使得它们与 ...

  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. 一致性Hash算法(KetamaHash)的c#实现
  2. LA3029最大子矩阵
  3. 【荐】说说CSS Hack 和向后兼容
  4. Java 7在整数中出现的次数
  5. 快速打开unity manual的方式
  6. 论文阅读 - Beat Tracking by Dynamic Programming
  7. 服务器升级中暂不可修改怎么回事,抖音服务器升级中,暂不支持本地区开播抖音怎么在法国直播?...
  8. 格密码教程(二):格的基本定义,格基转换
  9. kafka消费者分区的分配的三种机制
  10. display: inline-block;水平居中
  11. lievent源码分析:evbuffer
  12. python常用数据结构_Python中常用的查找数据结构及算法汇总
  13. activemq 搭建2
  14. java自己写框架_用java自己动手写个简单RCP框架
  15. MultipartFile多文件上传
  16. iec104规约遥测遥信解析笔记
  17. 数学经典思想:数学归纳法 理解+实战
  18. html中超链接使用_html超链接有哪些类型 html中,超链接用的是什么标签
  19. Kali自带密码字典rockyou.txt解压
  20. C语言银行排队系统仿真

热门文章

  1. 【ROS wiki】ros wiki官方教程与ROS wiki页面检索
  2. 分享两个苹果cms10采集新闻和明星接口接口
  3. 如何用标签机打印长序列号的条形码
  4. CVPR 2022 | Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络
  5. Mac没有winnt格式_在Mac上轻松将MOV转换为MP4的四大免费方法
  6. 编译alsa相关库,在android4.1下应用。
  7. 4.4V/3.85V锂电池充电器方案
  8. 如何安装husky_利用huskylint-staged构建代码检查工作流
  9. 关于Java开发环境
  10. Unity 实用代码 小工具