解法一:枚举(暴力破解)
java描述
public int maxArea(int[] height) {
int maxNumber = 0;
for (int i = 0; i < height.length - 1; ++i) {
for (int j = i + 1; j < height.length; ++j) {
int area = (j - i) * Math.min(height[i], height[j]);
maxNumber = Math.max(maxNumber, area);
}
}
return maxNumber;
}
C++描述
int maxArea(vector<int>& height) {
int water = 0;
for (int i = 0; i < height.size() - 1; ++i){
for (int j = i + 1; j < height.size(); ++j){
int minHeight = min(height[j], height[i]);
water = max(water, (j - i) * minHeight);
}
}
return water;
}
javaScript描述:
var maxArea = function(height) {
let maxArea = 0;
for (let i = 0; i < height.length - 1; i++) {
for (let j = i + 1; j < height.length; j++) {
Area = (j - i) * Math.min(height[i], height[j]);
maxArea = Math.max(Area, maxArea);
}
}
return maxArea;
};
解法二:向中间夹逼
java描述
public int maxArea(int[] height) {
int max = 0;
for (int i = 0, j = height.length - 1; i < j;){
int minHight = height[i] < height[j] ? height[i++] : height[j--];
max = Math.max(max, (j-i+1) * minHight);
}
return max;
}
// max = Math.max(max, (j-i+1) * minHight); 这里的j-i+1是因为上面提前i++或j--了。
C++描述
int maxArea(vector<int>& height) {
int water = 0;
for (int i = 0, j = height.size() - 1; i < j;){
int minHight = height[i] < height[j] ? height[i++] : height[j--];
water = max(water, (j-i+1) * minHight);
}
return water;
}
javaScript描述:
var maxArea = function(height) {
let maxArea = 0;
for (let i = 0, j = height.length - 1; i < j;) {
let minHeight = height[i] < height[j] ? height[i++] : height[j--];
maxArea = Math.max((j - i + 1) * minHeight, maxArea);
}
return maxArea;
};