当前位置: 首页 > news >正文

【Python刷力扣hot100】11. Container With Most Water

问题

给定一个长度为n的整数数组height。绘制n条垂直线,其中第i条线的两个端点分别为(i, 0)(i, height [i])
找到两条垂直线,使其与 x 轴共同构成一个容器,且该容器能容纳最多的水。
返回容器可容纳的最大水量。

注:容器不可倾斜

例1:
在这里插入图片描述

Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
解释: 上述垂直线由数组 [1,8,6,2,5,4,8,3,7] 表示。在该情况下,容器能够容纳的最大水量(蓝色区域部分)为 49。

例2:

Input: height = [1,1]
Output: 1

约束:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

解1:常规遍历

两根线盛水量就是 他们x轴坐标之差*它们之间较短的线。可以遍历数组,共尝试n(n−1)2\frac{n(n-1)}{2}2n(n1)次,找到最大的盛水量。

时间复杂度O(n2)O(n^2)O(n2):嵌套遍历数组,共尝试n(n−1)2\frac{n(n-1)}{2}2n(n1)次。
空间复杂度O(1)O(1)O(1):需要的空间大小是固定的,使用几个变量即可。

class Solution:def maxArea(self, height: List[int]) -> int:ans=0for i in range(len(height)):for j in range(i+1,len(height)):ans=max(ans,(j-i)*min(height[i],height[j]))return ans

方法没问题,但是时间花费太多,会超时
在这里插入图片描述

解2:双指针

  1. 定义左指针l和右指针rl初始指向数组开头(0),r初始指向数组末尾。
  2. 计算面积area,之后将height[l]height[r]中较短的抛弃,也就是向右移动l或向左移动r。不断重复步骤2,直到lr相遇,也就是数组height被遍历了一遍

思考:

  • 抛弃短板,也就是跳过一部分情况,以缩短时间。通过遍历一次数组得到答案。
  • 为什么要抛弃短板? 如果我们抛弃长板,那么如果下一个板还是长板,水的面积显然会更小,因为x轴长度缩短了,如果下一个板子比现在的短板还短,那显然水的面积还是会小。所以抛弃长板是没有收益的。抛弃短板,情况才有可能变得更好。
  • 抛弃短板时有没有可能跳过最优的情况? 不会,因为每次计算的情况都是当前短板的“最优情况”,上面已经说过,当短板确定时,长板再怎么变化,都没办法让情况变得更好,所以每次计算时,都是当前短板存在时的最优情况。所以我们在移动短板时,会得到所有短板的最优情况(一堆极大值),我们需要的最终结果也是一个长板的一个短板组成,所以最终也会得到最优情况(一个最大值)。相当于在一堆极大值中间找最大值。

公式推导可参考官方题解

class Solution:def maxArea(self, height: List[int]) -> int:ans=0l=0;r=len(height)-1while l<r:area=(r-l)*min(height[l],height[r])ans=max(ans,area)if(height[l]<height[r]):l+=1else:r-=1return ans

参考

https://leetcode.cn/problems/container-with-most-water

http://www.dtcms.com/a/461533.html

相关文章:

  • 通信建设网站做网站主页上主要放哪些内容
  • 《常用 IDL(接口定义语言)详解与对比》
  • 做二手房产网站多少钱河南建设工程信息网站
  • K230基础-获取触摸坐标
  • Linux应用--网络编程
  • 鸟哥的Linux私房菜 第三部分: 学习shell与shell script
  • 鸿蒙中 UDP 数据包发不出去?一文教你从权限到代码彻底排查!
  • 前端小白学习路线(参考)
  • 大连工业大学图书馆网站建设优化培训班
  • 浅谈 富文本编辑器
  • 有手机网站了还要微网站吗设计平台兼职
  • **发散创新:状态函数在编程中的深度应用与实现**在编程领域,状态函数是一个核心概
  • 【OCR】PaddleX
  • Python 元组与集合详解
  • 微信小程序的页面生命周期 以及onShow的应用场景
  • 微信小程序入门学习教程,从入门到精通,微信小程序核心 API 详解与案例(13)
  • 企业建站系统知识库管理系统方案
  • 购物网站的排版wordpress个人主页
  • 51c视觉~3D~合集7
  • 生鲜买菜商城APP:便捷生活,触手可及的新鲜体验
  • 网站seo去哪个网站找好做化妆品的网站有哪些
  • Java求职面试:从Spring Boot到Kafka的技术探讨
  • ChatGPT Agent深度总结:从“对话工具”到“超级助理”的AI革命
  • shell编程实战
  • 拟定网站建设合同的工作过程记录拍摄微电影公司
  • 厦门 公司网站建设绵阳做网站的公司
  • 【android 驱动开发十一】pinctrl 子系统
  • 【android驱动开发十二】内核子系统大概-进阶
  • vue前端面试题——记录一次面试当中遇到的题(2)
  • 【pyTorch】关于PyTorch的高级索引机制理解