这题使用双指针来做很快就能实现,但是一般我们很难想到使用双指针来解决这个问题,我一开始想的就是用dp问题解法,因为之前是遇到过类似的问题42. 接雨水 - 力扣(LeetCode),这个也是类似的数组,求面积最大的问题,而且那题确实是用dp问题方法求解的,但是在这题要使用双指针很轻松就能解答出,看官方解答很快,主要的思想就是如果我们不移动短的那个边界,而是只移动长的边界会导致最终结果不会得到更新,所以我们不能固定短的边界,我们需要更新短的边界

只有更新掉短的地方才有可能有进步

class Solution {
    public int maxArea(int[] height) {
        int l = 0;
        int r = height.length - 1;
        int ans = 0;
        while (l < r) {
            int area = (r - l) * Math.min(height[l], height[r]);
            ans = Math.max(ans, area);
            if (height[l] < height[r]) {
                l++;
            }else {
                r--;
            }
        }
        return ans;
    }
}

更多推荐