码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-14 21:13:52      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:连线   ace   ase   pass   render   set   com   script   java算法   

11. Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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],其中有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<r){
            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.

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

标签:连线   ace   ase   pass   render   set   com   script   java算法   

原文地址:http://www.cnblogs.com/haoHaoStudyShare/p/7359964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!