LeetCode 11. Container With Most Water
題目要求:給出n個非負的整數a1,a2,… an。分別得到n個點(i,ai)。每個點(i,ai)與x軸上對應的點(i,0)組成一條垂直於x軸的線段。求任意兩條直線以及x軸形成的最大容器體積。
容器的體積爲對應兩條線段之間的距離乘以較小的線段長度。
解題思路
一開始用的是最蠢的方法,即使用雙重循環,對任意兩條邊進行比較,然後華麗麗地超時了。看了一下其他人的做法,此題需使用貪心算法。
- 用max記錄容器最大體積,用temp記錄當前容器體積;
- 初始化兩條線段的位置爲i=0和j=height.size()-1;
- 此時是左邊的線段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;
}
};