1 算法原理

适用场景:利用preSum 数组,可以在O(1)的时间内快速求出nums任意区间[i,j]内的所有元素之和

sum(i,j) = preSum(j + 1) - preSum[i]

算法模板

class NumArray:

    def __init__(self, nums: List[int]):
N = len(nums)
self.preSum = [0] * (N + 1)
for i in range(N):
self.preSum[i + 1] = self.preSum[i] + nums[i] def sumRange(self, i: int, j: int) -> int:
return self.preSum[j + 1] - self.preSum[i]

2 例题

303. 区域和检索 - 数组不可变

给定一个整数数组  nums,处理以下类型的多个查询:

计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right
实现 NumArray 类: NumArray(int[] nums) 使用数组 nums 初始化对象
int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] )
  示例 1: 输入:
["NumArray", "sumRange", "sumRange", "sumRange"]
[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
输出:
[null, 1, -1, -3] 解释:
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return 1 ((-2) + 0 + 3)
numArray.sumRange(2, 5); // return -1 (3 + (-5) + 2 + (-1))
numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))
  提示: 1 <= nums.length <= 104
-105 <= nums[i] <= 105
0 <= i <= j < nums.length
最多调用 104 次 sumRange 方法 来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/range-sum-query-immutable
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class NumArray:

    def __init__(self, nums: List[int]):
self.presum = [0] * (len(nums) + 1)
for i in range(len(nums)):
self.presum[i + 1] = self.presum[i] + nums[i]
print(self.presum)
def sumRange(self, left: int, right: int) -> int:
return self.presum[right + 1] - self.presum[left] # Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

leetcode 参考链接

LeetCode----前缀和的更多相关文章

  1. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  2. [LeetCode] Longest Common Prefix 最长共同前缀

    Write a function to find the longest common prefix string amongst an array of strings. 这道题让我们求一系列字符串 ...

  3. LeetCode 14 Longest Common Prefix(最长公共前缀)

    题目链接:https://leetcode.com/problems/longest-common-prefix/?tab=Description   Problem: 找出给定的string数组中最 ...

  4. LeetCode:最长公共前缀【14】

    LeetCode:最长公共前缀[14] 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flo ...

  5. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串

    所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...

  6. 【LeetCode】Longest Common Prefix(最长公共前缀)

    这道题是LeetCode里的第14道题. 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["f ...

  7. 【Leetcode】【简单】【14最长公共前缀】【JavaScript】

    题目 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",& ...

  8. 第15个算法-实现 Trie (前缀树)(LeetCode)

    解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode ...

  9. [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  10. [LeetCode] 14. Longest Common Prefix 最长共同前缀

    Write a function to find the longest common prefix string amongst an array of strings. If there is n ...

随机推荐

  1. 【中英】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

    [中英][吴恩达课后测验]Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入 上一篇:[课程5 - 第一周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程5 -第二周编程 ...

  2. Bootstrap Table强大的web数据表格渲染框架

    Bootstrap Table 是什么 ‌Bootstrap Table 是一个基于 Bootstrap 框架的开源插件,专为快速构建功能丰富.响应式的数据表格而设计.‌ 它支持排序.分页.搜索.导出 ...

  3. uniapp中使用mqtt.js的踩坑记录

    最近在uniapp的vue3.0版本中使用mqtt.js库时遇到了一些坑,经过亲身踩坑,现在把实际能够实现在uniapp的app端能够使用mqtt.js的方法步骤记录如下: 一.安装 首先安装mqtt ...

  4. js加密手机号码中间四位方法

    一.实现效果: 二.方法代码封装: 方法一: //encryptPhoneNumber.ts /** * 加密手机号码中间四位 * @param phone 手机号 * @returns { stri ...

  5. Web前端入门第 65 问:JavaScript 函数参数各种使用方式

    函数参数是什么? 就是函数内部无法确定的一个东西,需要外部传给函数内部的玩意儿,语法上就是写在函数括号中的东东.比如: function test(a) {} 其中的 a 就是 test 函数的参数, ...

  6. Android stuidio 上传项目代码至码云

    这居然是我的第一篇博客,如何用Android studio上传项目至码云呢?话不多说直接开始,我找了很多方法碰壁很多最终看到了这篇博客:https://blog.csdn.net/shuijianba ...

  7. 大数据计算引擎 EasyMR 如何简单高效管理 Yarn 资源队列

    设想一下,作为一个开发人员,你现在所在的公司有一套线上的 Hadoop 集群.A部门经常做一些定时的 BI 报表,B部门则经常使用软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底 ...

  8. Java源码分析系列笔记-1.JMM模型之先谈硬件

    目录 1. 冯诺依曼体系结构 2. 高速缓存 2.1. 工作原理 2.2. 存储器层次结构 2.3. 局部性原理 3. 缓存一致性/可见性问题 3.1. 如何解决 3.1.1. 总线加锁 3.1.2. ...

  9. 学习spring cloud记录1-使用idea新建第一个spring cloud

    新建项目 1.新建项目,选择Maven 2.填写信息点击finish 删除src作为父级 添加子项目 1.在项目上新键-->new-->module-->Spring Initial ...

  10. 论文中关于要使用600线的python代码

    简介 论文中通常要使用600dpi的图片, 如果一个一个用PS来进行修改实在是费力不讨好. 使用python一套带走 code import os from PIL import Image impo ...