LeetCode Top 100 高频算法题 07:11. Container With Most Water

LeetCode Top 100高频算法题,即LeetCode上最高频的100道求职面试算法题。小编和实验室同学之前面试找工作,也只刷了剑指offer和这top 100算法题,在实际面试中也遇到了很多LeetCode上的原题。剑指offer算法最优解之前和大家分享了,LeetCode Top 100这100道算法题,每道题小编都刷了很多遍,并且总结了一种最适合面试时手撕算法的最优解法。后续每天和大家分享一道LeetCode top 100高频算法题,以及小编总结的最优解法。

0. 算法题顺序
LeetCode Top 100 高频算法题系列的LeetCode算法题目就不帮大家翻译了,程序员应该需要能看懂。LeetCode算法题有一个技巧:先看每道题的example,大部分情况看完example就能理解题目意思;如果看完example还有疑惑,可以再回过头来看英文题目。这样也可以节省一点时间~

1. 题目描述
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 the line i is at (i, ai) and (i, 0). Find two lines, which, together with the x-axis forms a container, such that the container contains the most water.
Notice that you may not slant the container.
2. Examples
1th example

image

Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.

height中的数字对应着一个柱形图:横坐标是height数字的索引值 + 1;高度是height组数中的数字;求的是这些柱形图中最大矩形的面积

2th example

Input: height = [1,1]
Output: 1

3th example

Input: height = [4,3,2,1,4]
Output: 16

4th example
Input: height = [1,2,1]
Output: 2

3. Constraints(输入的数据约束)
n = height.length
2 <= n <= 3 * 104
0 <= height[i] <= 3 * 104
解析
在LeetCode上本题属于Medium难度。这道题也是一道典型的动态规划类型题目,动态规划类型题目非常重要,这类题目也是面试中的常客!!
本题是高频面试题!!!

O(n)解法:

我们从最大的宽度开始搜索即从left=0,right=height.length开始搜索;

由于目前是最大的宽度,而left和right所确定的边界容器高度取决于高度较短的边界(能装多少水取决于短边)

如果我们需要通过移动边界之一来增加容器的容量:由于移动边界会造成容器宽度减小,宽度减小可能会造成容量减小;只有当容器的有效高度增加时,才可能抵消掉由于边界减小造成的容器减小的那部分容量(只有短边增加才能增加容器的有效高度)。

如何增加当前边界决定的容器有效高度?因为容器的有效高度是由较短的那条边决定的,此时移动较高的那条边,对容器的有效高度无影响,所以我们只能移动边界中较短的边界

证明:假设最优解是高度为(a,b)的组合,那么当其中一个边界(假设为left)先到达最优解之一时(a),直到另外一个边界也到达另外一个最优解前,该边界不会再移动。现在证明:当left先到达最优边界高度a,在right到达另外一个最优边界前,left不会移动:

如果在right到达最优边界之前,left移动了,即出现了right指向的高度比a大(因为移动时我们总是移动短边):此时right-a的宽度比b-a宽度更大(因为right出现在b之后,right>b),所以只需要比较高度,而容器有效高度分别为: min(right,a)=a 和min(a,b);

前者为有效高度a,后者:若a>b,则为b, 此时前者有效高度和宽度均大于后者;若a<=b,,后者有效高度为a,与前者相同,但是前者的有效宽度更大,因此(a,right)是更优解,与假设不符。

综上,我们每次移动高度小的边界,2个边界相遇之前一定会有最优解出现!

下面是代码

class Solution {
    public int maxArea(int[] height) {
      int left = 0;
      int right = height.length-1;
      int maxCap = 0;
      while(left<right){
          int cap = (right-left)*Math.min(height[left],height[right]);//(height[left]<=height[right]?height[left]:height[right]);
          if(cap>maxCap)
              maxCap = cap;
​
          //移动边界
          if(height[left]<=height[right])
              left++;
          else
              right--;          
      }       
      return maxCap;
    }
​
    /*
     暴力解法:O(n^2)
    */
    /*public int maxArea(int[] height) {
        int maxCapacity = -1;
        for(int i=0;i<height.length-1;i++){
            for(int j=i+1;j<height.length;j++){
                int cap = (j-i)*(height[i]<=height[j]?height[i]:height[j]);
                if(cap>maxCapacity)
                    maxCapacity = cap;
            }
        }
        return maxCapacity;
    }*/
}

其他文章

  1. 免费帮忙下载csdn和百度文库资料福利
  2. 学习笔记和学习资料汇总:前端 + 后端 + java + 大数据 + python + 100多实战项目 + C++
  3. 我的秋招经历总结:一站式秋招规划
  4. 零基础学爬虫
  5. 零基础C++学习总结

欢迎关注个人公众号【菜鸟名企梦】,公众号专注:互联网求职面经javapython爬虫大数据等技术分享:
公众号菜鸟名企梦后台发送“csdn”即可免费领取【csdn】和【百度文库】下载服务;

公众号菜鸟名企梦后台发送“资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353