题目链接:https://leetcode.com/problems/container-with-most-water/description/

题目大意:给出一串数组(a1, a2, a3, ...an),表示坐标(i, ai),同样表示一条直线是从(i, 0)到(i, ai),从中选出两条直线,计算其容器能蓄水多少,并找出最多的蓄水量。(容器不能倾斜,就是两条直线可以是不同高度,但是蓄水量要按照低高度的那条直线来计算),例子如下:

法一:暴力,对于一条直线,分别遍历左边和右边直线,计算其蓄水量,取最大者。可惜超时了。代码如下:

     public int maxArea(int[] height) {
int res = 0;
for(int i = 0; i < height.length; i++) {
//计算左边直线
for(int j = height.length - 1; j > i; j--) {
if(height[j] >= height[i]) {
res = Math.max(res, (j - i) * height[i]);
break;
}
}
//计算右边直线
for(int j = 0; j < i; j++) {
if(height[j] >= height[i]) {
res = Math.max(res, (i - j) * height[i]);
break;
}
}
}
return res;
}

法二:两指针移动,与42题的两指针移动类似但略有区别,左指针与右指针相比较,记录较大者,若左指针较小,则从左往右移动,若右指针较小,则从右往左移动,如果当前值比较大者大,则计算:(较大者下标-当前值下标)*当前值高度,计算得到最后的结果。代码如下(耗时8ms):

     public int maxArea(int[] height) {
int res = 0, left = 0, right = height.length - 1;
while(left < right) {
//如果左指针<=右指针
if(height[left] <= height[right]) {
while(left < right && height[left] <= height[right]) {
res = Math.max(res, (right - left) * height[left++]);
}
}
//如果左指针>右指针
else {
while(left < right && height[left] > height[right]) {
res = Math.max(res, (right - left) * height[right--]);
}
}
}
return res;
}

最新文章

  1. PHP日志压缩下载
  2. 简单理解JavaScript闭包
  3. JRebel for Android 1.0发布!
  4. win8 64位系统,安装JDK的步骤及其环境配置
  5. Syslog Cisco Incident
  6. 从XML文件乱码问题,探寻其背后的原理(转)
  7. Memcached源码分析之items.c
  8. Django入门(一)
  9. HBase 数据库检索性能优化策略--转
  10. include指令和include动作
  11. codeforces-1144 (div3)
  12. 07_mysql常用sql语句
  13. P4550 收集邮票-洛谷luogu
  14. centos 6.5 ruby环境安装
  15. JAVA 类的三大特性,封装,继承,多态 的一些发现总结
  16. confusing c++ 重写 与 重定义 记录1
  17. Dos命令的介绍
  18. svn检出项目后,serverlet包 报错
  19. linux后台运行jar程序
  20. Socket通信编程实例(SIB和SS&#39;SOB)

热门文章

  1. BZOJ3875 AHOI2014/JSOI2014骑士游戏(动态规划)
  2. Java之JNI的介绍与应用20170622
  3. 关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)
  4. Codeforces Round #416 (Div. 2)A B C 水 暴力 dp
  5. C++并发编程 thread
  6. 「Linux」VMware安装centos7(二)
  7. django 配置xamdin遇到的坑
  8. DialogFragment 将数据传回Activity的onActivityResult方法
  9. HTML入门(三)后台系统显示页面_框架标签
  10. 重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)