Analysis on “Container With Most Water ”

本文详细解析了Container With Most Water问题的解决方案,采用双指针技巧寻找能容纳最多水的两个垂直线。通过实例演示了如何利用木桶原理确定最大水量,并提供了C++实现代码。

  Container With Most Water Problem:

  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.


  Analysis: 

  The wooden barrel principle, the bucket of water storage depends on the shortest board.     //木桶原理,水桶中的存水量取决于短板。

  step i: set two pointer istart and iend  to point the current working min and max index of the  array, initialize them as: istart = 0, iend = height.size() - 1;
  step ii. when the lower index istart is less than the higher index iend, move the "short board" to gain the volume of the new container, likewise: the area = min(height[istart], height[iend]) * (iend - istart); otherwise, return the larger volume between the current max volume and the volume of the new container;
  step iii.do step ii till istart less than iend

  So the c++sourcecode:
  #include <vector>//vector
  using std::vector;
  #include <limits.h>//INT_MIN
  #include <windows.h>//min, max

  int maxArea(vector<int> &height) {
  int istart = 0, iend = height.size()-1;
  int result = INT_MIN;
  while (istart < iend) {
    int area = min(height[istart], height[iend]) * (iend - istart);
    result = max(result, area);     // Error code: int reslut = max(result, area); redefinition the global variable as a Local variable
    if (height[istart] <= height[iend]) {
      ++istart;
    }else {
      --iend;
    }
  }
  return result;
  }

  What I have learnt from this problem

  1. when using global variable, you should be initialize it and must mind where you use it, use it correct. Don't redefinition it as a Local variable, never do it again;
  2. draw a mind map in your paper to think very clearly before you coding;
  3. C++ allow program redefine the variable in the inner scope that have already defined in the outer scope, so this is a trip when you have no idea about the mechanism.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值