题目链接:http://oj.leetcode.com/problems/container-with-most-water/

第一个解法是用两个数组双向记录。方法的时间复杂度是O(n+max)。这里的max是height的最大值。当时没有想到用双向遍历的方法去做。【貌似第一遍leetcode中还从来没有用过双向遍历】

 1 class Solution {
 2 public:
 3   int maxArea(vector<int> &height) {
 4     // Start typing your C/C++ solution below
 5     // DO NOT write int main() function
 6     int max=-1;
 7     int * ar;
 8     int n = height.size();
 9     ar = new int[n];
10     vector<int>::iterator ii;
11     int i=0;
12     for (ii= height.begin(); ii!=height.end();ii++, i++){
13       if (*ii>max)
14         max = *ii;
15       ar[i] = *ii;
16     }
17     int * f, *g;
18     f = new int[max+1];
19     g = new int [max+1];
20     for (i=0; i<=max; i++){
21       f[i]=-1;
22       g[i]=-1;
23     }
24     int j;
25     for (i=0; i<n; i++){
26       j = ar[i];
27       while(j>=0 && f[j]==-1){
28         f[j] = i;
29         j--;
30       }
31     }
32     for (i=n-1; i>=0; i--){
33       j = ar[i];
34       while (j>=0 && g[j]==-1){
35         g[j] = i;
36         j--;
37       }
38     }
39     int area = 0;
40     for (i=0; i<n; i++){
41       if (g[ar[i]]>i){
42         int ta = (g[ar[i]]-i)*ar[i];
43         if (ta>area)
44           area = ta;
45       }
46     }
47     for (i=n-1; i>=0; i--){
48       if (f[ar[i]]<i){
49         int ta = (i-f[ar[i]])*ar[i];
50         if (ta>area)
51             area = ta;
52         }
53     }
54     delete []ar;
55     delete []f;
56     delete []g;
57     return area;
58   }
59 };

双向遍历的算法倒是很简单:

 1 class Solution {
 2 public:
 3   int maxArea(vector<int> &height) {
 4     // Start typing your C/C++ solution below
 5     // DO NOT write int main() function
 6     int l=0, r = height.size()-1;
 7     int area = 0;
 8     while (l<r){
 9         int t = (r-l)*min(height[l], height[r]);
10         if (t>area)
11             area = t;
12         if (height[l]<height[r])
13             l++;
14         else r--;
15     }
16     return area;
17   }
18 };

不仅复杂度降为O(n),代码量更是大大的少了。

至于证明。你懂的。

转载于:https://www.cnblogs.com/zhanghs/archive/2013/03/26/2983624.html

leetcode - Container With Most Water相关推荐

  1. [leetcode] Container With Most Water

    思路:最大面积等于两条垂直线中较小的一条乘以与x轴相交的长度,可以使用Two Pointers,一个从数组头开始(记为i),一个从数组尾部开始(记为j),当i < j时,一直循环找最大面积,如果 ...

  2. 【贪心+双指针】LeetCode 11. Container With Most Water

    LeetCode 11. Container With Most Water Solution1: 参考网址:http://www.cnblogs.com/grandyang/p/4455109.ht ...

  3. leetcode#42 Trapping rain water的五种解法详解

    leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain Water Given ...

  4. LeetCode 42. Trapping Rain Water 【两种解法】(python排序遍历,C++ STL map存索引,时间复杂度O(nlogn))

    LeetCode 42. Trapping Rain Water Python解法 解题思路: 本思路需找到最高点左右遍历,时间复杂度O(nlogn),以下为向左遍历的过程. 将每一个点的高度和索引存 ...

  5. 【重点:BFS】LeetCode 407. Trapping Rain Water II

    LeetCode 407. Trapping Rain Water II 博客转载自:http://www.cnblogs.com/grandyang/p/5928987.html [太难了,被智商碾 ...

  6. 【重点:DP 双指针 栈】LeetCode 42. Trapping Rain Water

    LeetCode 42. Trapping Rain Water 本博客转载自:http://www.cnblogs.com/grandyang/p/4402392.html [自己又不会做,抄的-& ...

  7. Container with most water(盛水最多的容器)

    Container with most water(盛水最多的容器) 简单的证明 如图 题目: 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n ...

  8. LeetCode 42 Trapping Rain Water 收集雨水

    LeetCode 42 Trapping Rain Water 收集雨水 Given n non-negative integers representing an elevation map whe ...

  9. Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告

    1 解题思想 我看了下题目,发现比预想中的简单,加之我比较烂,所以其实我还是没做,只是看懂了上回贴的代码,然后做了一下注释,现在我来讲下题目. 首先请看下上一题,上一题是2D的这题是3D的: Leet ...

最新文章

  1. 绩效真的重要吗?绩效管理系统有哪些?
  2. 通过小故事,了解多一点何谓 Node 高性能
  3. Linux学习之获取帮助
  4. 模拟集成电路的经典教材
  5. android 开启wifi失败,[求助]获取基站/wifi信息为空或失败
  6. 荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告
  7. UVALive 6511 Term Project
  8. python决策树原理_关于决策树算法最通俗的一次Python学习教程,你肯定得看
  9. JSP 获取访问者真正的IP地址
  10. 8 个最好的 jQuery 树形 Tree 插件
  11. 开课吧课堂之未被捕获的异常
  12. 韩立刚计算机网络笔记-第04章 数据链路层
  13. 三星内存编码_想问一下三星内存条的型号有什么区别
  14. Windows Server 2012开机账户自动登录
  15. 【PS专题】PS钢笔压力有感叹号怎么消除
  16. Matter协议特性解析(一) 支持非Matter协议,私有协议,Matter Bridge技术分析
  17. pdf转换成jpg转换器教程
  18. 「分布式系统之美」知乎圆桌精选大放送第二期|不要放过任何你感兴趣的话题
  19. 用php编写多项选择题_php 多选框问题(类似一道多选题)多选题的答案 以及正确答案都记录到数据库里了,读取修改问题...
  20. open-api-project

热门文章

  1. 模态对话框和非模态对话框的消息循环
  2. 【数据平台】同一mysql主机不同数据库建复制表
  3. tensorflow 添加官方代码--以leaky_relu为例
  4. opencv像素基本操作及图像遍历at
  5. python 求均值_数据分析:寻找Python最优计算性能
  6. python逐行读取json_如何用python读取json文件里指定的数据
  7. Take a Field Service Journey
  8. MyBatis是持久化层框架(SQL映射框架)-操作数据库
  9. Java的知识点27——打印子孙级目录和文件的名称、统计文件夹的大小、编码与解码的应用
  10. java的知识点17——java.util.Arrays类、多维数组