Leetcode 303 Range Sum Query
来源:互联网 发布:淘宝偏远地区有哪些 编辑:程序博客网 时间:2024/06/07 06:40
题目大意
输入一个数组,给定两个数组的索引i和j(i <= j),计算从索引i到j的和。
原题链接:303. Range Sum Query - Immutable
题解
一开始的时候我打算在初始化的时候用一个二维数组存储所有结果值,然后每次获取和的时候直接访问缓存的二维数组即可。
理想很美好,现实很扑街,惨遭MLE。
class NumArray(object): def __init__(self, nums): array_length = len(nums) self._look_up = [[None] * array_length for i in range(array_length)] # initialize first element for i in range(array_length): self._look_up[i][i] = nums[i] for row in range(array_length): for col in range(row + 1, array_length): self._look_up[row][col] = self._look_up[row][col - 1] + nums[col] def sumRange(self, i, j): return self._look_up[i][j]
在上面的代码中初始化的时候有一半的元素是没有用的,都为None,于是我调整了索引之间的计算关系,然而并没有什么卵用,惨遭TLE。
class NumArray(object): def __init__(self, nums): """ :param nums: 本来self._look_up是这样子的 self._look_up = [[None] * array_length for i in range(array_length)] 但是有一半是None,浪费的内存太多了,结果导致MLE 根据计算关系优化吧 """ array_length = len(nums) self._look_up = [[None] * (array_length - i) for i in range(array_length)] # initialize first element for i in range(array_length): self._look_up[i][0] = nums[i] for row in range(array_length): for col in range(1, array_length - row): self._look_up[row][col] = self._look_up[row][col - 1] + nums[row + col] def sumRange(self, i, j): return self._look_up[i][j - i]
最后使用一维数组存储计算结果,每次取结果的时候通过减法完成计算。
class NumArray(object): def __init__(self, nums): """ :param nums: 不一定是求一个二维数组,一位数组也可以,计算的时候用减法就可以了 """ array_length = len(nums) self._look_up = [None] * array_length if array_length != 0: self._look_up[0] = nums[0] for i in range(1, array_length): self._look_up[i] = self._look_up[i - 1] + nums[i] def sumRange(self, i, j): if i == 0: return self._look_up[j] else: return self._look_up[j] - self._look_up[i - 1]
阅读全文
0 0
- Leetcode 303 Range Sum Query
- Leetcode 303 Range Sum Query
- LeetCode 303 Range Sum Query
- [Leetcode]Range Sum Query
- Range Sum Query(leetcode)
- [LeetCode]Range Sum Query
- leetcode---Range Sum Query
- LeetCode : Range Sum Query
- [LeetCode] Range Sum Query
- leetCode---Range Sum Query
- leetcode[Range Sum Query
- LeetCode -- Range Sum Query
- [leetcode-303]Range Sum Query - Immutable
- [leetcode-303]Range Sum Query - Immutable(java)
- leetcode 303: Range Sum Query - Immutable
- Range Sum Query - Immutable leetcode 303
- leetcode 303 : Range Sum Query - Immutable
- LeetCode 303 : Range Sum Query - Immutable (Java)
- 去外包公司的伙伴们小心了!——亲身经历,数数外包公司的坑
- nginx的简单优化和反向代理
- 进程间通信----->共享内存
- 1等于0.循环9吗?
- 分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace
- Leetcode 303 Range Sum Query
- linux查看目录的四种方法(ls只显示目录)
- Apache2
- Python笔记(1)----条件、循环语句
- execl保护工作簿解锁
- mysql的主从复制,读写分离
- 页面盗链检查&页面标题头小图标
- hdu1166+线段树经典题
- activiti 查询流程定义