代码改变世界

Container With Most Water

2015-03-30 14:19  笨笨的老兔子  阅读(140)  评论(0编辑  收藏  举报

给定一个有高度数组a,其中两个元素aiaj构成一个水箱,水箱体积为V=min(ai,aj)abs(ij),求maxV

基本思路,首先我们设定两块木板head和tail一个在头,一个在尾部,这个时候tailhead一定是最大的。然后开始往中间收缩,选择从短的板子开始往中间收拢,原因是水箱能够放的水的容量有最短的板决定。然后每次都比较收拢之后的容量是否大于原有容量,直到所有板子都被遍历到。

  1. class Solution {
  2. public:
  3. int maxArea(vector<int> &height) {
  4. int head = 0, tail = height.size() - 1, area = (tail - head)*(height[tail] > height[head] ? height[head] : height[tail]), tmpArea = 0;
  5. for (size_t i = 0; i < height.size(); i++)
  6. {
  7. if (height[head]<height[tail])
  8. {
  9. head++;
  10. tmpArea = (tail - head)*(height[tail] > height[head] ? height[head] : height[tail]);
  11. if (tmpArea > area)
  12. area = tmpArea;
  13. }
  14. else
  15. {
  16. tail--;
  17. tmpArea = (tail - head)*(height[tail] > height[head] ? height[head] : height[tail]);
  18. if (tmpArea > area)
  19. area = tmpArea;
  20. }
  21. }
  22. return area;
  23. }
  24. };