p94 盛最多水的容器(leetcode 11)

一:解题思路

设S为盛最多水的量。S=min(h(i),h(j))*(j-i),其本质就是以高度较小的那条边为基准,做出一个长方形,然后求出这个长方形的面积即可。关键:h(i)<h(j):i=i+1 else:j=j-1.

Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        if (height.size() == 0) return 0;
        int maxValue = 0;
        int i = 0, j = height.size() - 1;
        while (i < j)
        {
            int cur = min(height[i], height[j])*(j-i);
            maxValue = max(maxValue,cur);
            if (height[i] < height[j]) i++;
            else j--;
        }

        return maxValue;
    }
};

Java:

class Solution {
        public int maxArea(int[] height) 
        {
               if(height==null || height.length==0) return 0;
               int maxValue=0;
               int i=0,j=height.length-1;
               while(i<j)
               {
                   int cur=Math.min(height[i],height[j])*(j-i);
                   maxValue=Math.max(maxValue,cur);
                   if(height[i]<height[j]) i++;
                   else j--;
               }
               
               return maxValue;
        }
    }

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12642924.html