zoukankan      html  css  js  c++  java
  • Container With Most Water——LeetCode

    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.

    题目大意:给定一个数组,下标和值分别代表x轴坐标和高度,找出两个元素使得他们之间和x轴围成的范围最大(由短的那个决定高)。

    解题思路:一开始想暴力,后来想DP,应该都是O(N^2)的,都过不了,后来看了下提示Two Pointers,前后两个指针,与2Sum的思想类似。

    看的比较好的一个解释:

    Idea / Proof:

    1. The widest container (using first and last line) is a good candidate, because of its width. Its water level is the height of the smaller one of first and last line.
    2. All other containers are less wide and thus would need a higher water level in order to hold more water.
    3. The smaller one of first and last line doesn't support a higher water level and can thus be safely removed from further consideration.
        public int maxArea(int[] height) {
               if(height == null || height.length<=1){
                   return 0;
               } 
               int area=Integer.MIN_VALUE,i=0,j=height.length-1;
               while(i < j){
                   area = Math.max(area,(j-i)*Math.min(height[i],height[j]));
                   if (height[i]<height[j]) {
                       i++;
                   }else{
                       j--;
                   }
               }
               return area;
        }
  • 相关阅读:
    python3爬虫 -----新浪微博(m)-------评论爬取
    hdu 5585
    Atcoder 092
    python3糗事爬取-------------------糗事百科
    python3爬虫 -----爬取职位招聘信息-------from腾讯社会招聘
    python3电影详细信息爬取-------------------电影天堂
    Python词云分析
    合并排序
    活动安排问题
    你好,2019!
  • 原文地址:https://www.cnblogs.com/aboutblank/p/4610302.html
Copyright © 2011-2022 走看看