leetcode: container-with-most-water
阿新 • • 發佈:2019-08-30
題目描述:
給定n個非負整數a1,a2,…,an,其中每個數字表示座標(i, ai)處的一個點。以(i,ai)和(i,0)(i=1,2,3...n)為端點畫出n條直線。你可以從中選擇兩條線與x軸一起構成一個容器,最大的容器能裝多少水?
注意:你不能傾斜容器
解題思路:
- 此類求極值的問題一般都是從哪一個點出發一次遍歷
- 在遍歷的過程中求出結果並將結果與已儲存的值進行比較,迭代
程式碼如下:
public int maxArea(int[] height) {
if(height == null || height.length == 0) return 0;
int left = 0;
int right = height.length - 1;
int sum = 0;
// 從兩端開始遍歷,求出當前的結果值
while(left < right){
int area = (right - left) * Math.min(height[left],height[right]);
sum = Math.max(area, sum);
// 對下標進行迭代,替換較小的數
if(height[left] < height[right]){
left++;
}else
{
right--;
}
}
return