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

    Well, an interesting problem. If you draw some examples on a white board and try to figure out the regularities, you may have noticed that the key to solving this problem is to use two pointers, one starting from the left end and the other starting from the right end. We compute an area for one configuration of the two pointers. Then we need to move them. If the left pointer has lower height, then we know it must be moved to one point with larger height in the right to make it possible for the area to increase. For the right pointer, the case is similar.

    The following code is not well optimized, but being pretty short :-)

     1 class Solution {
     2 public:
     3     int maxArea(vector<int> &height) {
     4         int l = 0, r = height.size() - 1, area = 0;
     5         while(l < r) {
     6             area = max(area, min(height[r], height[l]) * (r - l));  
     7             height[l] <= height[r] ? l++ : r--;
     8         }
     9         return area;
    10     }
    11 };

    You may avoid unnecessary checks by moving the left and right pointers to another place with larger height. However, the following code runs slower than the above one...

     1 class Solution {
     2 public:
     3     int maxArea(vector<int> &height) {
     4         int l = 0, r = height.size() - 1, area = 0;
     5         while(l < r) {
     6             int h = min(height[l], height[r]), w = r - l;
     7             area = max(area, h * w);  
     8             while (height[l] <= h && l < r) l++;
     9             while (height[r] <= h && r > l) r--;
    10         }
    11         return area;
    12     }
    13 };

    Since the problem is not that hard, you may be required to think more, such at its time complexity. Could you prove that it runs in O(n) time? Well, this link has a very clever proof.

  • 相关阅读:
    7-3 列表或元组的数字元素求和 (20 分)
    7-2 一帮一 (15 分)
    7-11 字典合并 (40 分)
    7-6 统计工龄 (20 分)
    7-5 统计字符出现次数 (20 分)
    7-4 分析活动投票情况 (20 分)
    7-3 四则运算(用字典实现) (30 分)
    7-22 找鞍点 (20 分)
    制作 U 盘启动盘
    mysql 多表连接的
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4646659.html
Copyright © 2011-2022 走看看