Leetcode-011-盛最多水的容器

本题的暴力法不难,难的是 O(n) 的方法。

移动的策略是每次向内移动较短的那一端,为什么呢,因为如果向内移动长的那一端面积一定减少,但是移动短的那一端存在面积变大的可能性。

关键的关键就是向内移动长的那端面积一定见少,这样思路就明确了。

class Solution {
    public int maxArea(int[] height) {
        int l=0;
        int r=height.length-1;

        int result = 0;

        while(l<r){
            result = Math.max(result, Math.min(height[l], height[r]) * (r - l));

            if(height[l]<height[r]){
                l++;
            }else{
                r--;
            }
        }
        return result;
        
    }
}
class Solution:
    def maxArea(self, height: List[int]) -> int:

        i=0
        j=len(height) - 1
        result = 0

        while i<j:
            result = max(result, min(height[i], height[j])*(j-i))
            if height[i]<height[j]:
                i+=1
            else:
                j-=1
        return result

猜你喜欢

转载自www.cnblogs.com/huangzengrui/p/12347357.html