LeetCode 11. Container With Most Water

LeetCode 11. Container With Most Water

題目要求:給出n個非負的整數a1,a2,… an。分別得到n個點(i,ai)。每個點(i,ai)與x軸上對應的點(i,0)組成一條垂直於x軸的線段。求任意兩條直線以及x軸形成的最大容器體積。
容器的體積爲對應兩條線段之間的距離乘以較小的線段長度


解題思路

一開始用的是最蠢的方法,即使用雙重循環,對任意兩條邊進行比較,然後華麗麗地超時了。看了一下其他人的做法,此題需使用貪心算法。

  1. max記錄容器最大體積,用temp記錄當前容器體積;
  2. 初始化兩條線段的位置爲i=0j=height.size()-1;
  3. 此時是左邊的線段i向右移動還是右邊的線段j向左移動呢?既然橫豎容器的寬度都要減1,那麼就讓高度儘可能高,所以height[i]和height[j]誰比較小誰就往中間移動。直到最後i>=j。

代碼實現如下:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int i = 0;
        int j = height.size() - 1;
        int max = 0;
        int temp = 0;
        while (i < j) {
            temp = (j - i)*min(height[i], height[j]);
            if (max < temp)
                max = temp;
            if (height[i] < height[j])
                i++;
            else
                j--;
        }
        return max;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章