11. 盛最多水的容器

这个题目需要清楚一个规律,我们从最左边和最右边两个值开始,当左边的值比较小时,只有往右移动左边的线才可能得到更大的的值,具体代码如下所示:

class Solution {
public:
    int maxArea(vector<int>& height) {
        int n = height.size();
        if (n < 2) {
            return 0;
        }
        
        int left = 0;
        int right = n - 1;
        int max_area = 0;
        
        while (left < right) {
            max_area = max(max_area, (right - left) * min(height[left], height[right]));
            if (height[left] < height[right]) {
                left++;
            }
            else {
                right--;
            }
        }

        return max_area;
    }
};

  

原文地址:https://www.cnblogs.com/rulin/p/14028208.html