一:解题思路
设S为盛最多水的量。S=min(h(i),h(j))*(j-i),其本质就是以高度较小的那条边为基准,做出一个长方形,然后求出这个长方形的面积即可。关键:h(i)<h(j):i=i+1 else:j=j-1.
Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int maxArea(vector<int>& height) { if (height.size() == 0) return 0; int maxValue = 0; int i = 0, j = height.size() - 1; while (i < j) { int cur = min(height[i], height[j])*(j-i); maxValue = max(maxValue,cur); if (height[i] < height[j]) i++; else j--; } return maxValue; } };
Java:
class Solution { public int maxArea(int[] height) { if(height==null || height.length==0) return 0; int maxValue=0; int i=0,j=height.length-1; while(i<j) { int cur=Math.min(height[i],height[j])*(j-i); maxValue=Math.max(maxValue,cur); if(height[i]<height[j]) i++; else j--; } return maxValue; } }
原文:https://www.cnblogs.com/repinkply/p/12642924.html