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

Subscribe to see which companies asked this question

给定n个非负整数a1,a2,...,an,其中每个表示坐标(i,ai)处的点。绘制n条垂直线,使得线i的两个端点在(i,ai)和(i,0)。找到两条线,它们与x轴一起形成一个Container ,即:就是说,x轴上在1,2,...,n点上有许多垂直的线段,长度依次是a1a2, ..., an。找出两条线段,使他们和x抽围成的面积最大。面积公式是 Min(ai, aj) X |j - i|

package leetcode;

/**
 * 
 * @author Mouse
 *
 */
public class Solution {
	public static int maxArea(int[] height) {
		int start = 0;
		int end = height.length-1;
		int max = 0;
		while (start < end) {
			int temp = (end - start)
					* (height[start] >height[end] ? height[end]
							: height[start]);
			if (temp > max) {
				max = temp;
			}
			if (height[start]<height[end]) {
				int k=start;
				while (k<end&&height[k]<=height[start]) k++;
				start=k;
			}else{
				int k=end;
				while (k>start&&height[k]<=height[end]) k--;
				end=k;
			}

		}
		return max;

	}

	public static void main(String[] args) {
		int[] height = { 2, 3, 4, 5, 18, 17,6};
		int max=maxArea(height);
		System.out.println(max);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值