Trapping Rain Water Array+技巧
2015-07-10 22:24
423 查看
思路:
数组+技巧。时间复杂度O(N),空间复杂度O(1)。
找到最高的柱子的位置(可能不止一个,选任意一个都行),这样,将array分成左右两部分:
(1)遍历左部分,保存一个当前认为的最高的柱子的高度h,如果所经过的柱子高度
(2)对于右半部分也是一样。
数组+技巧。时间复杂度O(N),空间复杂度O(1)。
找到最高的柱子的位置(可能不止一个,选任意一个都行),这样,将array分成左右两部分:
(1)遍历左部分,保存一个当前认为的最高的柱子的高度h,如果所经过的柱子高度
h'比
h小,那么,
h-h'一定是被trap住的;时刻更新当前认为的最高柱子。
(2)对于右半部分也是一样。
class Solution { public: int trap(vector<int>& height) { int n = height.size(); //find max height to split the array int max = 0; for(int i = 0; i < n; ++i) { if(height[i] > height[max]) { max = i; } } //calculate sum from left to max int sum = 0, peak = 0; for(int i = 0; i < max; ++i) { if(height[i] > peak) { peak = height[i]; }else { sum += peak - height[i]; } } peak = 0; //calculate sum from right to max for(int i = n - 1; i > max; --i) { if(height[i] > peak) { peak = height[i]; }else { sum += peak - height[i]; } } return sum; } };
相关文章推荐
- Android入门(45)——第七章 使用ContextMenu实现上下文菜单
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象
- Android_播放器的进度条
- Android自定义类似ProgressDialog效果的Dialog
- android 透明度计算
- IOS 整体框架类图值得收藏
- View Controller、Delegate、TextField——《iOS编程》第六、七章学习笔记
- 含有过滤功能的android流式布局
- Android_在线视频播放器
- iOS开发 之 AFNetworking的基本使用
- Android开发:程序目录结构详解
- Unity学习笔记 之 关于 Unity UI 的 Slider 的代码记录
- android动画的透明度渐变、旋转动画、缩放动画、评议动画
- Android_Touch事件的分发和消费机制
- atitit.微信支付的教程文档 attilax总结
- Swift之使用UIAlertController实现UIActionsheet
- atitit.微信支付的教程文档 attilax总结
- iOS中多线程原理与runloop介绍
- iOS NSString,NSMutableString的常用用法
- android studio的优化 1