11. Container With Most Water

Given n non-negative integers a1,a2, ...,an, where each represents a point at coordinate (i,ai). n vertical lines are drawn such that the two end points of line i is at (i,ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.

思路:两边往中间找,替换掉短板

public class Solution {
    public int maxArea(int[] height) {
        int max = 0;
        int left = 0;
        int right = height.length-1;

        while(left<right){
            int area = (right-left)*Math.min(height[left],height[right]);
            if (area>max){
                max = area;
            }

            if (height[left]<height[right]){
                left++;
            }else{
                right--;
            }
        }

        return max;
    }
}

C++ code

class Solution {
public:
    int maxArea(vector<int>& height) {
        int maxVal = 0;
        int left = 0;
        int right = height.size()-1;

        while (left<right){
            int area = (right-left)*min(height[right],height[left]);
            if (area>maxVal) maxVal = area;
            if (height[left]<height[right]){
                left++;
            }else{
                right--;
            }
        }

        return maxVal;
    }
};

results matching ""

    No results matching ""