接雨水 lintcode
来源:互联网 发布:禁忌的边界线动作数据 编辑:程序博客网 时间:2024/06/11 18:47
这道题可以有两种做法。
做法一:扫两遍。 对某个值A[i]来说,能trapped的最多的water取决于在i之前左边的最高值和在i右边的最高的值,然后取当中较小的一个。 所以可以根据上面的分析先从左到右扫一遍得到数组LeftMostHeight,然后再从右到左计算RightMostHeight,这样只扫了两遍可以得到答案,时间复杂度是O(n),空间复杂度是O(n)。
做法二:两个指针扫一遍, 这道题其实是一道两个指针的题目,而且指针属性是对撞型指针。 所以用两个指针分别指向数组的头和数组尾。 然后每次比较两个指针所指向的值,选小值指针向中间移动,并且每次更新遍历LeftMostHeight或者RightMostHeight, 这样就可以算出每个点的可以接的雨水数目。 这种方法的时间复杂度是O(n)。空间复杂度是O(1)。
public int trapRainWater1(int[] heights) { int res = 0; int l= 0 ,r = heights.length - 1; int lmax = 0 , rmax= 0; while(l < r){ lmax = Math.max(lmax, heights[l]); rmax = Math.max(rmax, heights[r]); if(lmax < rmax){ res += lmax - heights[l]; l++; }else{ res += rmax - heights[r]; r--; } } return res; }
0 0
- LintCode-接雨水
- LintCode:接雨水
- LintCode:接雨水
- 接雨水 lintcode
- lintcode[363]:接雨水
- LintCode:M-接雨水
- 接雨水-LintCode
- 接雨水 II-LintCode
- LintCode rain trap 接雨水
- [LintCode 363] 接雨水(Python)
- 雨水,lintcode
- **[Lintcode]Trapping Rain Water 接雨水
- lintcode刷题——接雨水
- 接雨水
- 接雨水
- 接雨水
- 接雨水问题(C++)
- 接雨水问题
- js、css引用地址后加时间戳
- 等待光标的两种实现方式
- dom4j在联网能正常解析,断网时解析报错的处理方法
- Oracle 11g学习笔记--日期和时间的存储与处理
- RecyclerView在5.0以上版本滑动不流畅(没有惯性效果)问题的处理
- 接雨水 lintcode
- 关于Java中==与equals的解析
- 并查集(Union-Find)算法介绍
- 从零开始玩转JMX(二)——Condition
- MyEclipse2014 删除Struts2中的antlr2.7.2.jar,解决Struts2和Hibernate中的antlr版本冲突
- 快速使用反射更换Android全局字体
- 校验器
- 通过反射获取构造方法,属性,方法信息
- struts2全局结果集global-results