博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版)Leetcode-11.盛最多水的容器
阅读量:4091 次
发布时间:2019-05-25

本文共 584 字,大约阅读时间需要 1 分钟。

01 题目

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

给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
在这里插入图片描述
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例:输入:[1,8,6,2,5,4,8,3,7]输出:49

02 解析

让 i 从小到大开始遍历,j 从len(height)-1到小开始遍历 (没必要 i 来个len(height)-1遍,这样还能减少点时间复杂度)

最大面积为:宽是 i 和 j 的间距,高是min(height[i],height[j])
以短板为高度,那么要移动短板的指针。

为什么?

如果矮板不变,移动高板的指针:遇到更高的,面积不会变大;遇到更短的,面积不变 甚至还可能会变小

03 代码

def maxArea(height):    i,j = 0,len(height)-1    water = 0    while i

转载地址:http://yujii.baihongyu.com/

你可能感兴趣的文章
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
【UGUI/NGUI】一键换Text/Label字体
查看>>
【C#】身份证本地验证
查看>>
【Unity】坑爹的Bug
查看>>
【算法】求数组中某两个数的和为目标值
查看>>
如何高效学习动态规划?
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
Dijkstra‘s algorithm (C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>