11. Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
给定一个长度>2的数组a[n],其中有n个点为(i,a[i]),求寻找两个点与x轴的连线组成的区域能装水最多
解题分析:
1.注水最多并不是面积最大,而是最短板决定面积的大小
2.找到两个最短板最大而且两个之间间距最大的就是最大面积
方法一:
常规思路,采取两个for循环,遍历所有面积,取最大值这样的话你的n过大时时间空间复杂度
- Time complexity : O(n^2)O(n2). Calculating area for all frac{n(n-1)}{2}2n(n−1) height pairs.
- Space complexity : O(1)O(1). Constant extra space is used.
方法二:
左右两个标记进行循环,一旦当前木板为短板,则向另一侧移动下标寻找更短的板子
public class Solution { public int maxArea(int[] height) { int l=0,r=height.length-1,max=0; while(l<r){ max=Math.max(max,Math.min(height[l],height[r])*(r-l)); if(height[l]>height[r]){ r--; } else l++; } return max; } }
-
Time complexity : O(n)O(n). Single pass.
-
Space complexity : O(1)O(1). Constant space is used.