LeetCode十一题:容纳最多水的容器【11/1000 python】

2024-04-05 05:52

本文主要是介绍LeetCode十一题:容纳最多水的容器【11/1000 python】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

👤作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。
会一些的技术:数据分析、算法、SQL、大数据相关、python
作者专栏每日更新:
LeetCode解锁1000题: 打怪升级之旅

LeetCode解锁1000题: 打怪升级之旅icon-default.png?t=N7T8https://blog.csdn.net/cciehl/category_12625714.html
python数据分析可视化:企业实战案例icon-default.png?t=N7T8https://blog.csdn.net/cciehl/category_12615648.html
备注说明:方便大家阅读,统一使用python,带必要注释,公众号 数据分析螺丝钉 一起打怪升级

“容纳最多水的容器”是一个经典的数组和双指针问题,考验的是对空间利用和指针操作的理解。本文将通过不同的算法解决这个问题,并提供代码示例及详细的解题步骤。

问题描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

注意:你不能倾斜容器。

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:数组中的第二个和最后一个元素形成的容器可以容纳最多的水,其面积为 49。

解题思路

方法一:暴力法

最直观的方法是尝试所有可能的两点组合,计算它们能形成的容器的面积,然后找出最大值。

解题步骤
  1. 遍历每一对索引组合 (i, j),其中 0 <= i < j < n
  2. 对每对索引计算容器的面积:Area = min(height[i], height[j]) * (j - i)
  3. 记录并更新最大面积。
python示例
def maxArea_v1(height: [int]) -> int:max_area = 0for i in range(len(height)):for j in range(i + 1, len(height)):area = min(height[i], height[j]) * (j - i)max_area = max(max_area, area)return max_area

复杂度分析

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

方法二:双指针法

双指针法是解决这个问题的最佳方法,它利用了“向内移动短板可以找到可能的更大面积”的直觉。

解题步骤
  1. 初始化两个指针分别指向数组的开头和结尾。
  2. 计算当前两个指针形成的容器的面积,并更新最大面积。
  3. 移动较短的一边的指针向内,直到两个指针相遇。
python示例
def maxArea(height: [int]) -> int:max_area, left, right = 0, 0, len(height) - 1while left < right:area = min(height[left], height[right]) * (right - left)max_area = max(max_area, area)if height[left] < height[right]:left += 1else:right -= 1return max_area

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
双指针图解
初始状态

设想一个容器的左右边界由线段的两端组成。此时,左指针在数组的最开始位置(索引 0),右指针在数组的最末尾位置(索引 len(height) - 1)。这个容器的宽度是最大的。

  [1,8,6,2,5,4,8,3,7]^               ^|               |left           right
移动指针

接下来,我们比较左右指针指向的高度。为了增加容器的高度,我们总是向内移动较矮的边,因为容器的实际高度由较矮的那边决定。在每一步中,我们计算当前指针指向的容器能容纳的水量,并更新最大值。

如果左边较矮:
[1,8,6,2,5,4,8,3,7]^             ^left         right
如果右边较矮:

如果在某一步中,右指针指向的高度小于左指针指向的高度,那么我们移动右指针向左一位。

[1,8,6,2,5,4,8,3,7]^           ^left       right
结束条件

当左右指针相遇时,我们已经考虑了所有可能的容器,循环结束。

总结

“容纳最多水的容器”问题通过暴力法可以直观地理解问题,但双指针法在效率上大大提升,是解决这类问题的典型示例。学会双指针技巧不仅可以帮助我们优雅地解决这个问题,也是提升算法解题能力的重要手段。

这篇关于LeetCode十一题:容纳最多水的容器【11/1000 python】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877778

相关文章

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接: https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。 代码如下: public int maxArea1(int[] height) {int n = height.length;int

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain

python 点滴学

1 python 里面tuple是无法改变的 tuple = (1,),计算tuple里面只有一个元素,也要加上逗号 2  1 毕业论文改 2 leetcode第一题做出来

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe