class Solution {
//双指针 贪心
//假设l < r, l 和 r之间是容纳的水是最优解。
//当i到达左边边界l时候,只需要j在r右边位置向左移,height[l] >= height[j],j不停的移动到r就是找到最优解,
//所以height[j]<= height[l]严格小于左边界的。
/*反正法:条件是l到r之间最优解max,r<= j <len, height[j]严格小于height[l]边界。
*假设:height[j]不于height[l]边界,即height[j]>=height[l],那么最优解为height[l] * (j - l + 1) > max
*与条件相反,假设不成立。所以height[j]<= height[l]严格小于左边界
*/
public int maxArea(int[] height) {
int l = 0, r = height.length - 1;
int maxArea = 0;
while(l < r) {
maxArea = Math.max(maxArea, Math.min(height[l], height[r]) * (r - l));
if(height[l] > height[r]) --r;
else ++l;
}
return maxArea;
}
}
11. 盛最多水的容器
最新推荐文章于 2024-05-15 18:08:13 发布