LeetCode 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.

题意:

给一个数组,其中数组的值表示的是一个坐标(i,ai),那么现在就会有n条垂直的直线,然后这些直线和底下的x轴合成表示一个盛水的容器,然后求这个盛水容器的面积最大是多少?

题解:

首先我们计算,横坐标最大的时候,这种情况下,已经保证了横坐标是最大了,那么只需要考虑纵坐标,而这个面积是由两个纵坐标中的较小那个所决定的,所以我们可以计算这个纵坐标的值,如果刚才的那个面积中纵坐标的开头的那个比末尾的那个要小,那么就将开头的那个+1,否则就将末尾的那个-1.一次类推。

public class Solution 
{
    public int maxArea(int[] height)
	{
		int length = height.length;
		if(length == 0 || height == null)
		   return 0;
		int start = 0;
		int end = length - 1;
		int max = 0;
		while(start < end)
		{
		    int area = Math.min(height[start],height[end]) * (end - start);
		    max = Math.max(max,area);
		    if(height[start] <= height[end])
		       start++;
		    else 
		       end--;
		}
		return max;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值