Container With Most Water
2015-09-10 21:31
330 查看
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 line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
这个题目比较简单,常规的思想很容易编写的,所有的情况遍历一遍就行了。但是当边的数量过多的时候,时间过长,毕竟是平方量级的。
class Solution { public: int maxArea(vector<int>& height) { int max=0,h=0; for(int i=0;i<height.size();i++){ for(int j=i+1;j<height.size();j++){ h=height[i]>height[j]?height[j]:height[i]; if(h*(j-i)>max) max=h*(j-i); } } return max; } };
所以,这道题的关键在于如何减小边的选择。因此,从底最宽的情况开始计算,保留高度较高的边,逐渐向中间缩减。就可以将复杂度降为一次。代码如下:
class Solution { public: int maxArea(vector<int>& height) { int max=0,h=0; int l=0,r=height.size()-1; while(l<r){ h=height[l]<height[r]?height[l]:height[r]; if(h*(r-l)>max) max=h*(r-l); if(h==height[l]) l++; else if(h==height[r]) r--; } return max; } };
相关文章推荐
- C++ Vector用法详解
- 大家注意vector, list, set, map成员函数erase
- java中vector与hashtable操作实例分享
- C++ vector删除符合条件的元素示例分享
- C++ Vector用法深入剖析
- vector与map的erase()函数详细解析
- vector,map,list,queue的区别详细解析
- C++ vector的用法小结
- stl容器set,map,vector之erase用法与返回值详细解析
- C++中vector的用法实例解析
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
- 关于STL中vector容器的一些总结
- JAVA Vector源码解析和示例代码
- Java中的Vector和ArrayList区别及比较
- Java中Vector和ArrayList的区别
- Vector 还是ArrayList
- vector-list-deque
- java集合类Vector与Enumeration用法举例
- ArrayList Vector LinkedList 区别与用法
- Enumeration Vector ArrayList Iterator