持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
n == height.length
2 <= n <= 105
0 <= height[i] <= 104
二、思路分析:
我们拿到本题,读取题意要求我们找出盛水最多的容器面积,换言之就是找到矩形面积最大的长高,就能求出最大面积啦。在动手解答题目之前,我们好好明确题目细节点:
- 题目给出的参数heigh数组,元素都是整数类型的
- height 每一个线条都是由(i,0)和(i,height[i])组成
- 容器中盛水,不能发生倾斜,以最小高为边界
我们解答本题,想要保证每一次取到长度和高度都是最佳的,我们可以使用双指针的方法。
- 容器的面积公式:
(len(height)-1-i)*minheight
- 定义两个指针i,j:i指针height开始位置,j指针指向height末尾🔚
- minheight是取height[i]与height[j]最小值
- 当height[i] 小于 height[j]时,i指针往右移动
- 当height[i] 大于 height[j]时,j指针往左移动
- 直到 i指针 大于 j指针时,退出循环♻️
题目给出的示列1来推理过程,如下图所示:
根据上述思路,我们使用python可以轻松实现,代码如下:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
j = len(height)-1
i = 0
zoom = 0
while i<j:
minheight = min(height[i],height[j])
zoom = max(zoom,minheight*(j-i))
if height[i] <= height[j]:
i +=1
else:
j -=1
return zoom
三、总结:
本题仍然考察我们使用双指针思想,开始与末尾指针往中间移动,能保证每一次取到临界值最佳的,因此只用遍历一次height列表就能找到最大的面积,AC代码提交记录如下:
- 时间复杂度O(n),n为height列表长度
- 空间复杂度O(1),没有使用额外空间
以上是本期内容,欢迎大佬们点赞评论,下期见~~