[leetcode] 42 Trapping Rain Water
2016-03-25 20:21
429 查看
具体思路就是先计算所有柱子的面积,然后先从左到右然后从右到左把坑填满,计算一个面积
用第二个面积减去第一个面积就是所求,注意各种细节。特殊情况单独讨论。
用第二个面积减去第一个面积就是所求,注意各种细节。特殊情况单独讨论。
class Solution { public: int trap(vector<int>& height) { //[0,1,0,2,1,0,1,3,2,1,2,1] // 0 1 2 3 4 5 6 7 8 9 10 if(height.empty()) { return 0; } int index=0; int max = 0; int maxunm=0; int flag=0; //寻找最大值的位置 for (int i = 0; i <height.size(); i++) if (height[i] >= height[max]) { max = i; maxunm=height[max]; } //柱子所占的面积 int pre=0; for(int i=0;i<height.size();i++) { pre=pre+height[i]; } if(maxunm==0) { return 0; } int sum=0; if(height.size()<=2) { return 0; } for(int i=0,j=1;i<height.size()-2;i++,j++) { if(i<max) { if(height[i]>height[j]) { height[j]=height[i]; flag=1; } else{ continue; } } else { if(height[i]<height[j]) { height[i]=height[j]; flag=1; } else{ continue; } } } for(int i=height.size()-2,j=height.size()-1;i>=0;i--,j--) { if(i<max) { if(height[i]>height[j]) { height[j]=height[i]; flag=1; } else{ continue; } } else { if(height[i]<height[j]) { height[i]=height[j]; flag=1; } else{ continue; } } } for(int i=0;i<height.size();i++) { sum=sum+height[i]; } //雨水的面积等于修改过后的面积减去之前柱子的面积 if(flag==1) { return sum-pre; } else { return 0; } } };
相关文章推荐
- 关于iOS工程文件夹的布局框架.
- unity3D:Unity中的优化技术
- 获取iOS设备的信息
- Android之自定义控件入门
- ios an ssl error has occurred and a secure
- Activity原理
- android小功能:checkbox使用自己的背景点击切换背景
- Android中的通知—Notification 自定义通知
- Android TagFlowLayout完全解析 一款针对Tag的布局
- IOS开发之结构体的使用
- IOS开发之storyBoard以及xib的使用
- iOS-百度地图添加标注自定义气泡
- objective-C学习笔记(八) 集合类型 Collection Types
- cocos2dx之box2d的使用
- 浅谈iOS运行时机制runtime(1)
- cocos2dx精灵做正逆时针圆周运动
- iOS 时间分钟秒的倒计时
- android简单的夜间模式
- Cocos2d-x 3.0 红孩儿私家必修 - 第二章 cpp-empty-test
- Android手机 Fildder真机抓包