タイトル説明
n個の非負の整数a1、a2、...、anを与えます。各整数は、座標内の点(i、ai)を表します。座標にn本の垂直線を引きます。垂直線iの2つの端点は、それぞれ(i、ai)と(i、0)です。x軸で形成されるコンテナが最も多くの水を保持できるように、2本の線を見つけます。
2ポインターソリューション:
面積=横座標の差✖小さい高さ[(ji)* Math.min(height(i)、height(j)]
小さい縦座標でポインターを移動するたびに
コード:
class Solution {
public int maxArea(int[] height) {
int i = 0;
int j = height.length-1;
int area = 0;
while(i < j){
area = Math.max(area,(j-i)*Math.min(height[j],height[i]));
if(height[i]<height[j]){
i++;
}else{
j--;
}
}
return area;
}
}
簡略版:
class Solution {
public int maxArea(int[] height) {
int i = 0;
int j = height.length-1;
int area = 0;
while(i < j){
area = (height[i] < height[j]) ? Math.max(area,(j-i)*height[i++]) : Math.max(area,(j-i) * height[j--]);
}
return area;
}
}