一开始直接想用暴力法加剪枝擦边通过的,没想到还是超时了;

谁知道最后输入从1-15000一共15000个数据,吓坏!
题解中得知双指针实现O(n),真的学到了,羡慕这些大佬的智商;

借鉴大佬题解:对O(n)的算法写一下自己的理解,一开始两个指针一个指向开头一个指向结尾,此时容器的底是最大的,接下来随着指针向内移动,会造成容器的底变小,在这种情况下想要让容器盛水变多,就只有在容器的高上下功夫。 那我们该如何决策哪个指针移动呢?我们能够发现不管是左指针向右移动一位,还是右指针向左移动一位,容器的底都是一样的,都比原来减少了 1。这种情况下我们想要让指针移动后的容器面积增大,就要使移动后的容器的高尽量大,所以我们选择指针所指的高较小的那个指针进行移动,这样我们就保留了容器较高的那条边,放弃了较小的那条边,以获得有更高的边的机会。

//暴力法
int maxArea(vector<int> &height)
{int len=height.size();if (len < 2)return 0; //元素不足2,非法int max = 0;int min = 0;int temp = 0;for (int i = 0; i < len - 1; i++){for (int j = i + 1; j < len; j++)  {if (height[i] != 0)//若除数为0 则非法{int nextJ = max / height[i];  //max对于当前height[i]最少要到height[j]才可能超过maxif (max / height[i] >= len) //超出数组大小 则对于height[i] 永远超过不了maxcontinue; //直接下一步if (nextJ > j)   //nextJ>j 说明至少要到height[nextJ]位置才可能超过maxj = nextJ; }min = height[i] < height[j] ? height[i] : height[j];temp = min * (j - i);if (temp > max)max = temp;}}return max;
}
//双指针法int maxArea(vector<int>& height) {int size = height.size();int left=0, right=size-1;int ans = 0;while(left < right){ans = max(ans, (right-left)*min(height[left], height[right]));if(height[left] > height[right]) --right;else ++left;}return ans;
}

Leetcode:11.container-with-most-water(盛水最多的容器)相关推荐

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

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

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

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

  3. LeetCode 11盛水最多的容器12整数转罗马数字

    目录 盛水最多的容器 题目描述 分析 整数转罗马数字 题目描述: 分析 结语 盛水最多的容器 公众号:bigsai,回复进群加入打卡,回复bigsai获取3GB的pdf资源.点赞再看,养成习惯! 题目 ...

  4. 力扣--盛水最多的容器

    题目: 给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条 ...

  5. LeetCode 11 Container With Most Water

    问题:给出一个数组nums,要求选择2个,使得容器中包含的水最多. 思路:假设选取x,y,其中x<y,则包含的水为min(x,y)*(index(y) - index(x)).此时应该选择在最小 ...

  6. 十一、盛水最多的容器

    题目:来源于LeetCode 给定一个长度为 n 的整数数组 height .有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) . 找出其中的两条线,使得它们与 ...

  7. LeetCode 11.Container With Most Water

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  8. leetcode 11. Container With Most Water

    题意:题目大概意思就是让你找两个数使得两个数的最小值乘以他们的距离最大Area 题解:设置两个变量, 一个是从头开始,一个是从尾开始,计算两个数的Area,并更新最大值,如果开始的元素大于结尾的元素则 ...

  9. Leetcode题库 11.盛水最多的容器(双指针法 C实现)

    文章目录 解析 思路 原理 代码 写法1 写法2 解析 p_0:左"指针" p_1:右"指针" Area:当前双"指针"代表面积大小 ret ...

最新文章

  1. 查看 SELinux状态及关闭SELinu
  2. 数据库的这些性能优化,你做了吗
  3. Openshift源中的高可用性Drools无状态服务
  4. 记一次吐血的ping: unknown host
  5. 2017 ICPC西安区域赛 A - XOR (线段树并线性基)
  6. 【Redis学习笔记】Redis初识
  7. nginx 缓存机制
  8. 基于Tensorflow针对cifar数据集运用卷积神经网络解决100类图片的分类问题。
  9. vue添加cnzz统计
  10. C语言:带你轻松干掉 腾讯笔试大题 带环链表
  11. 计算机的存储容量1kb表示什么,计算机的存储容量常用KB为单位,这里1KB表示什么?...
  12. 英文写作中常用的转折,并列词组
  13. 纸张的规格:A3.A4.A5.A6纸的尺寸大小
  14. Structure Extraction from Texture via Relative Total Variation
  15. 2021-2027全球与中国TAC功能膜市场现状及未来发展趋势
  16. 谷歌(Chrome)浏览器 视频播放全屏退出时死机
  17. 物联网案例研究:确保格兰仕智能设备不易受黑客攻击
  18. CollectionView的HeaderView头视图悬停
  19. 陷阱技术探秘 ──动态汉化Windows技术的分析
  20. c语言ceiling函数怎么用,ceiling函数 ceiling函数用法

热门文章

  1. hdu5791(DP)
  2. [ 转载 ] Java线程面试题 Top 50 (转载)
  3. c#仿照qq登录界面编辑框内容操作
  4. 《Unix网络编程》卷一(简介TCP/IP、基础套接字编程)
  5. css框模型、定位、浮动
  6. postgresql-int,bigint,numeric效率测试
  7. 基于virtualbox安装ubuntu18.04
  8. Multiload-ng
  9. 序《戎马书生马福祥》
  10. 基于C语言EOF与getchar()的使用详解