LeetCode Algorithms #119 <Pascal's Triangle II>
2016-04-14 16:04
274 查看
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return
Note:
Could you optimize your algorithm to use only O(k) extra space?
思路:
因为只返回结果一行,所以计算过程中除了k-1行有用之外,前面的空间都可以丢弃。
根据算法分析的规则,O(2k) = O(k)。因此最简单的方法就是用一个临时变量保存k-1行。然后不断更新这个变量。
注意交换时使用swap更新指针而不是vector赋值可以节约很多时间。
解:
题外话:
直觉告诉我,这种递推的加和,一部分信息已经存在于遍历的次数中,所以应该有一种解法,可以直接操作resultVector,并节约50%的空间。
但因为数学天赋太差,我想不出来。
可以有时间时多想想。
For example, given k = 3,
Return
[1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
思路:
因为只返回结果一行,所以计算过程中除了k-1行有用之外,前面的空间都可以丢弃。
根据算法分析的规则,O(2k) = O(k)。因此最简单的方法就是用一个临时变量保存k-1行。然后不断更新这个变量。
注意交换时使用swap更新指针而不是vector赋值可以节约很多时间。
解:
class Solution { public: vector<int> getRow(int rowIndex) { vector<int> resultRow = {1}; vector<int> tempRow; for(int rowIdx = 0; rowIdx < rowIndex; rowIdx++) { tempRow.clear(); tempRow.push_back(1); for(int idxInRow = 0; idxInRow < resultRow.size()-1; idxInRow++) { tempRow.push_back(resultRow[idxInRow]+resultRow[idxInRow+1]); } tempRow.push_back(1); resultRow.swap(tempRow); } return resultRow; } };
题外话:
直觉告诉我,这种递推的加和,一部分信息已经存在于遍历的次数中,所以应该有一种解法,可以直接操作resultVector,并节约50%的空间。
但因为数学天赋太差,我想不出来。
可以有时间时多想想。
相关文章推荐
- 用goto语句写的带父节点的中序遍历
- Django开发环境搭建
- 用Golang写一个搜索引擎
- 基于go语言的心跳响应
- django xadmin多个model的数据渲染在统一个template中
- Django提示django-admin.py: command not found
- 在ubuntu上安装Django的简单方法
- tango with django ch6 Model
- Mongo启动说明
- 百度权力调整:以Google为师,向华尔街示好
- Django
- django 模型 时间戳管理
- VIEWGOOD(远古)图书馆的资源融合与共享应用解决方案
- ubuntu安装sougou拼音输入法
- golang了解
- mac with go
- Django:之Sitemap站点地图、通用视图和上下文渲染器
- Django1.8将Debug设置为False时访问不到图片和静态文件方法
- 关于百度,google map的url api的调用
- Golang实现ping