本文主要是介绍leetcode - 11 盛最多水的容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目大意
给出一个非负整数数组 a1,a2,a3,…… an,每个整数标识一个竖立在坐标轴 x 位置的一堵高度为 ai 的墙,选择两堵墙,和 x 轴构成的容器可以容纳最多的水。
解题思路
这一题也是对撞指针的思路。首尾分别 2 个指针,每次移动以后都分别判断长宽的乘积是否最大。
class Solution
{public:int maxArea(vector<int> &height){int maxArea = 0;// 两个指针从两侧向中间扫描int left = 0;int right = height.size()-1;int area;while(left < right){// 计算面积area = (right - left) * (height[left] < height[right] ? height[left]:height[right]);// 跟踪最大区域maxArea = area > maxArea?area:maxArea;// 因为面积是由较短的边决定的// 所以我们增加面积就是增加短边//// 高度[左] < 高度[右] ? 左++:右--;//// 但是,上面的代码可能会导致不必要的`area`计算// 我们可以做一些改进,如下所示:if(height[left] < height[right]){do{left++;}while(left < right && height[left - 1] >= height[left]);} else{do{right--;}while(right > left && height[right + 1] >= height[right]);}} return maxArea;}
}
这篇关于leetcode - 11 盛最多水的容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!