Вам задается целочисленная высота массива длиной n. Существует n вертикальных линий, нарисованных таким образом, что две конечные точки i-й линии равны (i, 0) и (i, height[i]).
Найдите две линии, которые вместе с осью x образуют контейнер, такой, чтобы в контейнере было больше всего воды.
Верните максимальное количество воды, которое может храниться в контейнере.
Обратите внимание, что вы не можете наклонять контейнер.
Входные данные: height = [1,8,6,2,5,4,8,3,7]
Результат: 49
Пояснение:
Приведенные выше вертикальные линии представлены массивом [1,8,6,2,5,4,8,3,7]. В этом случае максимальная площадь воды (синяя секция), которую может вместить контейнер, равна 49.
Входные данные: height = [1,1]
Результат: 1
class Solution {
public:
int maxArea(vector<int>& height) {
int i = 0, j = height.size()-1;
int volume, bigger_volume = 0;
while(i < j) {
// вычисляем объем
volume = (j-i) * min(height[i], height[j]);
// если нужно, обновляем максимальное значение объема
if(volume > bigger_volume) {
bigger_volume = volume;
}
// если правая граница выше, двигаемся вправо
// иначе двигаемся влево
if(height[j] > height[i]) {
i++;
} else {
j--;
}
}
return bigger_volume;
}
};