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 end points 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.
思路:两边往中间找,替换掉短板
public class Solution {
public int maxArea(int[] height) {
int max = 0;
int left = 0;
int right = height.length-1;
while(left<right){
int area = (right-left)*Math.min(height[left],height[right]);
if (area>max){
max = area;
}
if (height[left]<height[right]){
left++;
}else{
right--;
}
}
return max;
}
}
C++ code
class Solution {
public:
int maxArea(vector<int>& height) {
int maxVal = 0;
int left = 0;
int right = height.size()-1;
while (left<right){
int area = (right-left)*min(height[right],height[left]);
if (area>maxVal) maxVal = area;
if (height[left]<height[right]){
left++;
}else{
right--;
}
}
return maxVal;
}
};