LeetCode11:Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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.

题目描述:在二维坐标系中,(i, ai) 表示 从 (i, 0) 到 (i, ai) 的一条线段,任意两条这样的线段和 x 轴组成一个木桶,找出能够盛水最多的木桶,返回其容积。

解题思路:用两个指针从两端开始向中间靠拢,如果左端线段短于右端,那么左端右移,反之右端左移,直到左右两端移到中间重合,记录这个过程中每一次组成木桶的容积,返回其中最大的。当左端线段L小于右端线段R时,我们把L右移,这时舍弃的是L与右端其他线段(R-1, R-2, ...)组成的木桶,这些木桶是没必要判断的,因为这些木桶的容积肯定都没有L和R组成的木桶容积大。(因为宽变小,即使出现R-1,或R-2等某个值小于L,那么这个小于L的值与宽相乘,体积自然也是比L和R组成的木桶更小)

class Solution{
public:
	int maxArea(vector<int> &height){
		int start = 0;
		int end = height.size() - 1;
		int result = INT_MIN;
		while (start < end){
			int area = min(height[end], height[start])*(end - start);
			result = max(result, area); // V = max( min(height[end], height[start])*(end-start) )
			if (height[start] <= height[end]){
				start++;
			}
			else{
				end--;
			}

		}
		return result;
	}
};


你可能感兴趣的:(LeetCode11:Container With Most Water)