day11.10
来源:互联网 发布:高中物理视频教学软件 编辑:程序博客网 时间:2024/06/08 06:24
词法分析器写的还是没有问题滴,上午交了满分^_^。
今天的成果= = …有点少。
中午帮室友用他的思路写了一遍算法作业15个case wa了3个还是没AC…结果没睡觉困得一比
说下那道hard吧。Trapping Rain Water
题目在stack里,提示用栈。要想储存水那么必须是高低高这种形式。容易想到创建一个栈,让它保存降序序列,遇到比top大的就进行计算能存储水量water,然后相加得到解。但难点就是这个临时的water如何找到一个合理的计算方法能让他正好是一直累加就可以得到最后的值。直接高度相减乘距离是肯定不行的,因为可能后面的water会包含前边,这样就算多了。然后又想到分类,当遇到比栈中最大的时候怎么样,一般情况怎么样等等,还是不好处理。
最后终于想到了一个计算water的方法:降序入栈,遇到比top大的就判断它和栈中倒数第二个元素谁小,用小的和栈顶元素相减乘距离就得到这一小块的water了,如果没有倒数第二个栈中元素,那么直接water就加0(这时不会产生存储水空间,画个图就能发现),这样water累加就可以达到不重不漏。
class Solution {public: int trap(vector<int>& height) { vector<pair<int, int>> v; for (int i = 0; i < height.size(); i++) v.push_back(pair<int, int>(height[i], i)); int water = 0; stack<pair<int, int>> s; for (int i = 0; i < v.size(); i++){ if (s.empty() || v[i].first <= s.top().first) s.push(v[i]); else{ while (!s.empty() && v[i].first>s.top().first){ int tmp=s.top().first; s.pop(); if (s.empty()) break; else //看该数前边的那个和V[i]谁大,用小的那个去算一小块面积,这样就可以累加了 water += (min(s.top().first, v[i].first)-tmp)*(v[i].second - s.top().second-1); } s.push(v[i]); } } return water; }};
明天数组那几道写了,再写几题stack和Tree。然后把计网作业做了 差不多~
0 0
- day11.10
- day11
- DAY11
- day11
- day11
- day11
- day11
- Day11
- day11
- day11
- day11
- day11
- day11
- Day11
- day11
- Day11
- day11
- Day11
- 2016年Android主流技术
- 07 面向对象一
- 利用Pin分析程序的动态行为特征
- 关于反爬虫,看这一篇就够了
- arcMap连接oracle数据库连接方式
- day11.10
- 实现Android国际化过程中遇到的问题
- 只在开发时使用 Stetho 的相关配置
- 【题】【搜索】NKOJ3868 二进制迷宫
- 抽象类和接口
- 宏定义#define的使用
- eclipse 运行Android程序时run as 时报Conversion to Dalvik format failed with error 1错误
- T-SQL 将数据随机分配 示例
- R语言:使用REmap绘制超炫酷的地图