给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。来自LeetCode
2. 解题思路
双指针:
一开始,双指针分别指向数组开始和结尾的两端边界,即left = 0; right = height.length - 1;
盛最多水的容器,即求最大面积,即 两个指针指向的数字中的较小值 * 指针之间的距离;
左右指针移动时,谁小谁移动。
3. 代码实现
publicclassMaxArea{publicstaticintmaxArea(int[] height){int left =0;int right = height.length -1;int ans =0;while(left < right){int area = Math.min(height[left],height[right])*(right - left);
ans = Math.max(ans,area);if(height[left]< height[right]){
left ++;}else{
right--;}}return ans;}publicstaticvoidmain(String[] args){int[] height ={1,8,6,2,5,4,8,3,7};
System.out.println(maxArea(height));}}