Middle-题目31: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.
题目大意:
给出一个数组a1,a2,an,其中第i个数代表平面坐标系上点(i,ai),那么求两个点,使得这两个点向x轴作出的两条垂线和x轴围成的“杯子”能容纳最多的水。
题目分析:
还是一个two pointers的问题。
首先,对两个点i,ai(j,aj)构成的“杯子”能装的水量用代数式表示为:min(ai,aj)(ji).于是问题归结为求此表达式的最大值。那么如何搜索呢?
令两个指针i和j分别指向数组的头和尾,观察两个“杯壁”,若j端较高,则如果存在更优的解,那么更优解的i值一定不是当前值(因为如果j向左找,不管j端有多高,受i端影响,杯子的容量不可能更高),所以j端较高时令i++,同理i端较高时令j–,并不断更新最大水量,当搜索到i=j时整个数组遍历完毕,返回最大值。
源码:(language:java)

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

成绩:
6ms,beats 57.22%,众数7ms,33.57%
Cmershen的碎碎念:
此题的朴素解法就是O(n2)的暴力搜索,提交会超时。但似乎此题还有更快的方法。

阅读更多
版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs https://blog.csdn.net/cmershen/article/details/51546407
个人分类: Leetcode
上一篇Middle-题目29:59. Spiral Matrix II
下一篇Middle-题目32:240. Search a 2D Matrix II
想对作者说点什么? 我来说一句

Dynamic Water System

2016年01月03日 8.43MB 下载

Unity water

2017年03月13日 849KB 下载

欧迪臣bit dmi MOST光纤音频解码器

2018年06月20日 268KB 下载

AQUAS Water River Set v1.4.2(水特效插件)

2018年04月19日 123.73MB 下载

ArcGIS Water Utilities Data Model

2009年05月21日 4.77MB 下载

Container-Networking-Docker-Kubernetes.pdf

2018年04月21日 1.93MB 下载

linux container

2014年10月27日 4.25MB 下载

没有更多推荐了,返回首页

关闭
关闭