题目描述:
给定一个非负整数序列:序列中依次表示高度。在坐标系内画出这么多条线( 线的端点为(i, hi) 和 (i, 0)),在其中寻找两条线使得两条线所构成的容器可以容纳最多的水。
分析:
方法一: 暴力解法
1.遍历左右边
2.找出所有面积
3.取最大值
方法二: 双指针法
1.设置两个指针,分别对应左右两边
2.计算当前所对应的容器容量
3.移动较短的指针向内移动
Python代码(暴力解法就不展示了,下面的是双指针解法):
def maxArea(height): l, r = 0, len(height) - 1 ans = 0 while l < r: area = min(height[l], height[r]) * (r - l) ans = max(ans, area) if height[l] <= height[r]: l += 1 else: r -= 1 return ans list = [1, 6, 2, 8, 7, 2, 2, 8, 9, 5] r = maxArea(list) print(r)
可以对上面稍微进行改进:
def maxArea(height): i, j = 0, len(height) - 1 maxArea = 0 while i < j: h, w = min(height[i], height[j]), j - i maxArea = max(maxArea, h * w) # record before the move curr = min(height[i], height[j]) if height[i] < height[j]: while height[i] <= curr and i < j: i += 1 else: while height[j] <= curr and i < j: j -= 1 return maxArea list = [1, 6, 2, 8, 7, 2, 2, 8, 9, 5] r = maxArea(list) print(r)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)