文章目录

  • 解析
  • 思路
  • 原理
  • 代码
    • 写法1
    • 写法2

解析

p_0:左”指针”
p_1:右”指针”
Area:当前双”指针”代表面积大小
ret:记录面积最大值

思路

p_0指向数组头部
p_1指向数组尾部
Area为当前双”指针”代表的面积
比较Area与ret大小

若height[p_0]>=height[p_1]
——”指针”p_0+1, ”指针”p_1所代表的面积一定小于Area
——”指针”p_0, ”指针”p_1-1所代表的面积可能大于Area
——要求最大面积, 于是p_1自减1
height[p_0]<height[p_1]
——同理有p_0自加1

原理

如何保证被剔除的p_1/p_0不会与除p_0/p_1外的”指针”形成更大的面积
证明:
若height[p_0]>=height[p_1], 则剔出p_1
”指针”p_0, ”指针”p_1所代表的面积=(p_1-p_0)*height[p_1]
存在i>0, ”指针”p_0+i, 与”指针”p_1形成的面积=(p_1-(p_0+i))*min(height[p_0+i], height[p_1])
比较双方第一项(p_1-p_0) ,(p_1-(p_0+i)) , 得到前者>后者
比较双方第二项height[p_1], min(height[p_0+i], height[p_1]) , 得到前者>=后者
于是有
被剔除的p_1不可能与p_0+i形成更大的面积

height[p_0]<height[p_1], 剔出p_0同理

代码

写法1

int maxArea(int* height, int heightSize){int p_0=0,p_1=heightSize-1,Area,ret=0;while(p_0!=p_1){if(height[p_0]>=height[p_1]){Area=(p_1-p_0)*height[p_1];p_1--;}else{Area=(p_1-p_0)*height[p_0];p_0++;}if(ret<=Area)ret=Area;}return ret;
}

写法2

int maxArea(int* height, int heightSize){int *p_0=height,*p_1=p_0+(heightSize-1),Area,ret=0;while(p_0!=p_1){if(*p_0>=*p_1){Area=(p_1-p_0)*(*p_1);p_1--;}else{Area=(p_1-p_0)*(*p_0);p_0++;}if(ret<=Area)ret=Area;}return ret;
}

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

  1. Leecode刷题热题HOT100(11)——盛水最多的容器

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

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

  3. LeetCode 11盛水最多的容器

    力扣 解释:给定数组nums,求Max( min(nums[i],nums[j])*(j-i) ), 0<=i<j<nums.size() 目录 双指针 简单证明: 小技巧 1.对撞 ...

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

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

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

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

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

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

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

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

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

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

  9. LeetCode题库11:盛最多水的容器——JavaScript解答

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

最新文章

  1. Android webview基础知识
  2. TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?
  3. 解决eclipse报PermGen space内存溢出异常的问题
  4. C++ STL priority_queue的正确使用方法
  5. 如何安装uclient_uclient软件
  6. 淮北农村生活污水处理设备——十四五生态环境保护规划
  7. Google账号找回通用方法(尤其是知道账号密码仍无法登录和找回的)
  8. conda 安装完了之后安装torch总是失败
  9. Linux简介和各发行版介绍
  10. Qt在设计ui界面时,在控件中输入中文,会自动变成英文字母,解决方案
  11. 键盘的某些键坏了咋办(如delete键等)
  12. NATO(北大西洋公约组织)采用ADOBE FLEX作为作战支持系统
  13. CAD制图初学入门技巧:如何批量生成CAD填充边界?
  14. python微信群发_更新新年祝福群发!小白转战Python微信定时发送消息给群或是个人!...
  15. 西山居工作室十周年回顾——产品篇
  16. 宝塔Linux面板——用正确的入口登录面板
  17. 【WSL2】配置连接 USB 设备并使用主机的 USB 摄像头
  18. 把话说清楚的万能公式
  19. xray和rad或burp联动
  20. 2022年4月16日,第9天

热门文章

  1. [Python从零到壹] 四十一.图像处理基础篇之图像采样处理
  2. Git之深入解析如何重写提交历史
  3. 根据使用频率为 5 个字符设计的哈夫曼编码不可能是( )
  4. Python回调函数
  5. Python3实现旋转数组的3种算法
  6. 带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
  7. 快速准备电子设计大赛
  8. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1080:余数相同问题
  9. 【Linux】一步一步学Linux——kill命令(124)
  10. python写快排_python 实现快速排序