首页 > 其他 > 详细

LeetCode OJ Container With Most Water

时间:2015-03-25 09:01:13      阅读:215      评论:0      收藏:0      [点我收藏+]

Given n non-negative integers a1a2, ..., 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 (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.

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++;

反之同理。

LeetCode OJ Container With Most Water

原文:http://blog.csdn.net/u012925008/article/details/44607243

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!