【算法设计作业】week2
来源:互联网 发布:泰国蛇毒洗面奶知乎 编辑:程序博客网 时间:2024/06/13 12:15
照例选题写解析
1.Trapping Rain Water
题意
大概意思就是给一个数组,代表石头高度,问你一共能装多少水。
思路
1.首先要知道,每一点能装的水 = min(左边最高石头高度-右边最高石头高度)-该点的高度
2.于是问题就变成求每一点左边最高石头高度和右边最高石头高度。一个很直观的思路是,双重循环,暴力解题,复杂度为O(n^2)。但是我觉得不优美,于是不用,但又想不出。
于是看了解析,可以用的办法是动态规划。既要求第i个左边最高的高度,只要用i-1左边最高高度和i高度相比,取最大值就好了。i-1依次类推,于是复杂度就降到了O(n),amazing!
代码
class Solution {public: int trap(vector<int>& h) { if (h.size() < 3) return 0; int ans = 0; // 这里注意,初始化vector要传入长度,不然后面用[]访问的时候会说引用空指针 vector<int> leftMax(h.size()), rightMax(h.size()); leftMax[0] = h[0]; rightMax[h.size()-1] = h[h.size()-1]; for(int i = 1; i < h.size(); i++) { leftMax[i] = max(leftMax[i-1], h[i]); } for(int i = h.size()-2; i > -1; i--) { rightMax[i] = max(rightMax[i+1], h[i]); } for(int i = 1; i < h.size() - 1; i++) { ans += min(leftMax[i], rightMax[i]) - h[i]; } return ans; }};
阅读全文
0 0
- 【算法设计作业】week2
- 算法设计Week2 LeetCode #169 Majority Element
- c++ 程序设计 week2 作业
- Linear Regression WEEK2编程作业
- 作业week2 'Guess the number'
- 个人作业Week2-代码复审
- 算法设计作业;贪心;
- 算法设计作业1
- 算法设计作业2
- 算法设计作业3
- 算法设计作业4
- 算法设计作业5
- 算法设计作业6
- 算法设计作业7
- 算法设计作业8
- 算法设计作业9
- 算法设计作业10
- 算法设计作业11
- 单词拼接
- PIXI.js源码解析(2)——Transform
- Eclipse安装Freemarker插件,高亮显示
- 【Maven】发布项目到Tomcat中
- 01-TCP建立连接及状态码
- 【算法设计作业】week2
- 多个adb.exe,adb已停止运行问题
- Mysql Server 免安装版安装教程
- java设计模式之适配器设计模式
- Azure 云中的机器学习简介
- UDP实现局域网多人聊天
- 顺序 优化进行MySQL的优化
- python的垃圾回收机制
- centos联网教程