题目链接放在这里了:11. 盛最多水的容器 - 力扣LeetCode这道题实际做起来非常的简单只需要想明白一件事就好了怎么移动双指针具体的做法如下class Solution { public int maxArea(int[] height) { if(heightnull||height.length0){ return 0; } int l 0; int r height.length-1; int res 0; while(lr){ int curArea (r-l)*Math.min(height[l],height[r]); res Math.max(curArea,res); if(height[l]height[r]){ l; }else{ r--; } } return res; } }这题的目的是找出两个柱子间最大的面积即下标的差*两个柱子之中较矮的高度的最大值这道题我只想出了暴力做法就是进行两个for循环时间复杂度超出要求了这道题正确的做法是先分析题意如果说任取两个柱子计算面积值如果较矮的柱子和中间的柱子组成容器的话如果说那个柱子比较矮的柱子还要矮那么下标差和两个柱子之中较矮的高度都会变小所以面积不可能比原来的大如果说那个柱子比较矮的柱子高那么两个柱子之中较矮的高度不变下标差变小所以也不会比原来的面积大。所以说保持较矮的柱子不变改变另一个柱子是不可行的其面积必然比原值小想要找到比原来面积更大的面积的话我们需要改变较矮的柱子所以我们的思路就是创建对向指针一个指向最后一个元素一个指向首元素进行遍历条件是左指针小于右指针取其中较小的元素进行移动左指针右移右指针左移并设置max记录最大值