LeetCode 11. Container With Most Water 题解
LeetCode 11. Container With Most Water 题解题目描述给你n个非负整数a1a2...an每个数代表坐标中的一个点(i, ai)。在坐标内画n条垂直线垂直线i的两个端点分别为(i, ai)和(i, 0)。找出其中的两条线使得它们与 x 轴共同构成的容器可以容纳最多的水。说明你不能倾斜容器。示例 1输入[1,8,6,2,5,4,8,3,7] 输出49 解释图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下容器能够容纳水表示为蓝色部分的最大值为 49。示例 2输入height [1,1] 输出1示例 3输入height [4,3,2,1,4] 输出16示例 4输入height [1,2,1] 输出2解题思路方法双指针思路使用两个指针分别指向数组的开头和结尾计算当前两个指针所形成的容器的面积比较当前面积和最大面积更新最大面积移动高度较小的那个指针因为移动高度较大的指针不会增加容器的面积重复上述过程直到两个指针相遇复杂度分析时间复杂度O(n)其中 n 是数组的长度。两个指针最多移动 n 次。空间复杂度O(1)只需要常数级的额外空间。代码实现方法双指针class Solution: def maxArea(self, height: List[int]) - int: left 0 right len(height) - 1 max_area 0 while left right: # 计算当前容器的面积 current_area min(height[left], height[right]) * (right - left) # 更新最大面积 max_area max(max_area, current_area) # 移动高度较小的那个指针 if height[left] height[right]: left 1 else: right - 1 return max_area测试用例测试用例 1输入height [1,8,6,2,5,4,8,3,7]输出49测试用例 2输入height [1,1]输出1测试用例 3输入height [4,3,2,1,4]输出16测试用例 4输入height [1,2,1]输出2总结本题是双指针的经典应用问题主要考察对双指针技巧的理解和使用。通过使用两个指针分别指向数组的开头和结尾我们可以有效地计算出最大的容器面积。双指针的核心思想是通过移动高度较小的那个指针我们可以尝试找到更大的高度从而可能增加容器的面积。这种方法的时间复杂度是 O(n)比暴力解法的 O(n²) 要高效得多。这种方法不仅适用于盛最多水的容器问题还可以应用于许多其他需要双指针技巧的问题例如两数之和、三数之和等。掌握双指针的使用对于解决这类问题非常重要。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2468264.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!