まず、対象の説明:
あなたは、各座標の数を表す非負整数nはA1、A2、...、点(I、愛)を得ました。垂直座標内の動画n行、私は2つのエンドポイントは、(i、AI)及び(I、0)は垂直線です。x軸の構成は、水を収容できるように一緒に容器を有する2本のラインを見つけます。
注:あなたは、コンテナを傾けることができない、とnの値が2以上です。
図の縦線は、入力配列[1,8,6,2,5,4,8,3,7]です。この場合、水を保持することができる最大のコンテナ49の(青色で示します)。
例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/container-with-most-water
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
第二に、問題解決のアイデア:
ダブルポインタ、左端の要素を左点、右端の要素を右点ので、各要素が中間値に移動させることが小さい場合、各記録領域(右<左)、満たされないサイクルが終了し、最大値を返します。
第三に、コード説明:
class Solution {
public int maxArea(int[] height) {
if(height.length==0||height.length==1){
return 0;
}
int left=0;
int right=height.length-1;
int max=0;
int high=0;
while(left<right){
int width=right-left;
//左边的元素值小,向中间移动,右边不动。
if(height[left]<height[right]){
high=height[left];
left++;
}
else{
high=height[right];
right--;
}
//计算面积最大值
max=max>(width*high)?max:(width*high);
}
return max;
}
}