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.

题意:



给一个数组,数值代表坐标点 (iai),现在要求任意两根线和x轴组成的容器最多可以放多少水,既求最大面积,注意容器不能倾斜

最简单的两层循环会超时,看了一下discuss里面有人加了一些控制条件可以通过

discuss里赞同数最高的答案 https://leetcode.com/discuss/11482/yet-another-way-to-see-what-happens-in-the-o-n-algorithm 用画二维数组的方式解释了为什么可以用双指针实现,自己又画了个坐标图再补充一下

left从第1开始,right从5开始,如果1比5短,那么不管2,3,4的高度是比1大还是小,算出来的面积暂且用are(i,5)表示,i从2到4,都比are(1,5)小,所以left指针往右移一步

同理,如果1比5长,算出来的面积are(1,j),j从2到4,也都比are(1,5)小,所以right可以左移一步

结束条件是左右两个指针相遇,O(n)就可以完成

public int maxArea(int[] height) {
		if (height == null || height.length == 1)	return 0;
		int left = 0, right = height.length - 1;
		int max = Integer.MIN_VALUE;
		while (left < right) {
			max = Math.max(max, (right - left) * Math.min(height[left], height[right]));
			if (height[left] < height[right]) {
				left++;
			} else {
				right--;
			}
		}
		return max;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值