Leetcode11:Container With Most Water

Leetcode11:Container With Most Water

题目描述:Container With Most Water

例图
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.

更中间的矩形因为离的较近,所以面积大小更依赖高度,而且更依赖两个中较小的高度。所以可以使用双指针法满足限制

解题过程

使用双指针法。
输入数组为height[],则:
i 和 j 构成的矩形的面积=( |j-i| )*min(height[j],height[i])
所以可以看出,面积总是受较短的长度的限制,而且如果两条线段离得越远,则面积越大。
因此想到双指针的方法,初始化left和right,分别指向数组的第一个和最后一个值。

当计算完当前面积后,则可以将指向较短的值的指针向下一个移动。因为,只要向下一个移动,两条线段的距离就会缩短,如果保持较短的指针不变,则高度值抑或等于当前较短的线段,抑或比当前的更短,面积永远不可能比当前值更大。

	public int maxArea(int[] height) {
		if (height.length<2) {
			return 0;
		}
		int left=0,right=height.length-1;
		int max=0;
		int area=0;
		while (left<right) {
			if (height[left]>height[right]) {
				area=(right-left)*height[right];
				right--;
			}
			else {
				area=(right-left)*height[left];
				left++;
			}
			max=Math.max(area, max);
		}
		return max;
	}

时间复杂度:O(n),一次扫描。

空间复杂度:O(1),使用恒定的空间。

看了题解以后,发现area这个变量可以省略,直接
maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
再进行长短的判定。代码可以更加精简。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值