11. 盛最多水的容器

中等 · 双指针

题目

11. 盛最多水的容器 官方题解

方法一:暴力

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution {
public:
    int maxArea(vector<int>& height) {
        int res = 0;
        for (int i = 0; i < height.size() - 1; i ++) {
            for (int j = i + 1; j < height.size(); j ++) {
                res = max(res, (j - i) * (min(height[i], height[j])));
            }
        }

        return res;
    }
};

时间复杂度:O(n^2)

空间复杂度:O(1)

方法二:双指针

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0, right = height.size() - 1;
        int res = 0;
        while (left < right) {
            res = max(res, (right - left) * (min(height[right], height[left])));
            if (height[left] <= height[right]) {
                left ++;
            } else {
                right --;
            }
        }  
        return res; 
    }
};

时间复杂度:O(n)

空间复杂度:O(1)