您的位置:首页 > 大数据 > 人工智能

lintcode-medium-Container with Most Water

2016-03-16 12:09 411 查看
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate
(i, ai)
. nvertical 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.

Given
[1,3,2]
, the max area of the container is
2
.

思路:

用左右两个指针向中间移动,记录任一时刻的截面积,如果比之前的结果大,就更新结果

当左边高度大于右边事,如果移动左边,则接下来的结果不会大于现在的结果,所以要移动右边,反之亦然,结论是总是移动高度较小的边

public class Solution {
/**
* @param heights: an array of integers
* @return: an integer
*/
public int maxArea(int[] heights) {
// write your code here

if(heights == null || heights.length == 0)
return 0;

int left = 0;
int right = heights.length - 1;
int result = 0;

while(left < right){
int area = (right - left) * Math.min(heights[left], heights[right]);
if(area > result)
result = area;

if(heights[left] > heights[right])
right--;
else
left++;

}

return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: