1. 程式人生 > >leetcode: container-with-most-water

leetcode: container-with-most-water

題目描述:

給定n個非負整數a1,a2,…,an,其中每個數字表示座標(i, ai)處的一個點。以(i,ai)和(i,0)(i=1,2,3...n)為端點畫出n條直線。你可以從中選擇兩條線與x軸一起構成一個容器,最大的容器能裝多少水?

注意:你不能傾斜容器

解題思路:

  1. 此類求極值的問題一般都是從哪一個點出發一次遍歷
  2. 在遍歷的過程中求出結果並將結果與已儲存的值進行比較,迭代

程式碼如下:

    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