您的位置:首页 > 大数据 > 人工智能

LeetCode OJ Container With Most Water

2015-03-25 00:57 381 查看
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 endpoints 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.
class Solution {
public:
	int maxArea(vector<int> &height) {
		int i = 0, j = height.size() - 1, ans = 0;
		while (i < j) {
			ans = max(ans, (j - i) * min(height[i], height[j]));
			if (height[i] < height[j]) i++;
			else j--;
		}
		return ans;
	}
};
解释下,如果height[i] < height[j],为什么是i++而不是j--呢?
如果j--,情况有如下两种:
1、新的height[j]比height[i]大,这是没有用的,装水面积取决于更短的height[i],而且宽度(j-i)还减少了,这样新得到的面积必然变小;
2、新的height[j]比height[i]小,这就更没用了,容器的宽度(j-i)和高度都减少了,新得到面积必然减少;
所以,当height[i] < height[j]的时候,选择i++;
反之同理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: