排水注水java_11. Container With Most Water【leetcode】,java算法,数组,求最大水池注水量...

11. Container With Most Water

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 and n is at least 2.

给定一个长度>2的数组a

,其中有n个点为(i,a[i]),求寻找两个点与x轴的连线组成的区域能装水最多

解题分析:

1.注水最多并不是面积最大,而是最短板决定面积的大小

2.找到两个最短板最大而且两个之间间距最大的就是最大面积

方法一:

常规思路,采取两个for循环,遍历所有面积,取最大值这样的话你的n过大时时间空间复杂度

Time complexity : O(n^2)O(n​2​​). Calculating area for all \frac{n(n-1)}{2}​2​​n(n−1)​​ height pairs.

Space complexity : O(1)O(1). Constant extra space is used.

方法二:

左右两个标记进行循环,一旦当前木板为短板,则向另一侧移动下标寻找更短的板子

public class Solution {

public int maxArea(int[] height) {

int l=0,r=height.length-1,max=0;

while(l

max=Math.max(max,Math.min(height[l],height[r])*(r-l));

if(height[l]>height[r]){

r--;

}

else

l++;

}

return max;

}

}

Time complexity : O(n)O(n). Single pass.

Space complexity : O(1)O(1). Constant space is used.

转载于:https://www.cnblogs.com/haoHaoStudyShare/p/7359964.html

点赞

收藏

分享

文章举报

6bc0d3204e5f182958392a25ce223bce.gif

e1089cbef1b3fe9d76f1d8e0af658b17.png

diaocongdie2176

发布了0 篇原创文章 · 获赞 0 · 访问量 78

私信

关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值