leetcode 【 Container With Most Water 】python 实现
2024-10-21 09:58:49
题目:
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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.
代码:oj测试通过 Runtime: 132 ms
class Solution:
# @return an integer
def maxArea(self, height):
# none case or one element case
if height is None or len(height)<2:
return 0
# left point and right point
left = 0
right = len(height)-1
max_container = 0
while left<right :
curr_container = min(height[left],height[right]) * (right-left)
max_container = max(curr_container,max_container)
if height[left]>height[right]:
right = right-1
else:
left = left+1
return max_container
思路:
数组前后双指针技巧。
有点儿像动态规划。
两个指针一左一右left right
面积为:min(height[left],height[right])*(right-left)
指针迭代条件为:哪边的指针所指位置的高度小,就从哪边往中间移动。每一步更新一次max_container的值。
为什么哪边的指针所指的位置高度小就从哪边往中间移动呢?能装多少水是有较短的那边决定的,因此如果寻求装更多的水,则应该优先从较短的一侧开始求变。
这样一来,每一次迭代后,都保证max_container保存了当前以及之前的可能最大蓄水量。
最新文章
- POJ2965
- 【USACO 2.1】The Castle
- sqlserver OpenRowSet 对应的三种数据库驱动
- win10 python nltk安装
- Datatable的Select()方法简介
- http://docwiki.embarcadero.com/RADStudio/XE7/en/Delphi_Data_Types
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
- Codeforces 544E Remembering Strings 状压dp
- [windows phone] 教你如何使地图动画缩放
- 编译的依赖不能vs的release工程
- 纯CSS3实现loading正在加载。。。
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
- CSS input type=";number";出现上下箭头时解决方案
- Oracle使用
- SSRF漏洞分析与利用
- Confluence 6 管理协同编辑 - 最大编辑者的限制
- Linux 下的 Redis 安装 &;&; 启动 &;&; 关闭 &;&; 卸载
- flask加vue 动画 加载更多
- java 遍历Map的四种方式
- css 超详细文档