搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
很楠不爱3
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
程序员请收好:10个非常实用的 VS Code 插件
2
如何使用api接入星火大模型(超详细,亲测有效!)_星火大模型v4接口
3
NLTK库——词形还原(Lemmatization)_nltk词形还原(lemmatization)
4
Python实战项目——用户消费行为数据分析(三)_数据挖掘消费者行为分析
5
【深度学习】归一化(十一)_权重归一化
6
LangChain安装和入门案例_langchain 安装
7
MySQL面试题系列-8
8
人工智能-----自然语言处理(NLP)基础理解_智能化需求调查与分析采用自然语言处理深度学习等技术从什么等自然语言描述文
9
第四届全国人工智能大赛答疑分享会等你围观_杨文瀚 鹏城实验室
10
西北乱跑娃 --- bottle web框架(七)_bottle 如何显示图片
当前位置:
article
> 正文
前缀和算法
作者:很楠不爱3 | 2024-03-29 06:38:36
赞
踩
前缀和算法
例题一
解法(前缀和):
算法思路:
a.
先预处理出来⼀个「前缀和」数组:
⽤
dp[i]
表⽰:
[1, i]
区间内所有元素的和,那么
dp[i - 1]
⾥⾯存的就是
[1, i - 1] 区间内所有元素的和,那么:可得递推公式: dp[i] = dp[i - 1] + arr[i] ;
b.
使⽤前缀和数组,「快速」求出「某⼀个区间内」所有元素的和:当询问的区间是 [l, r]
时:区间内所有元素的和为:
dp[r] - dp[l - 1]
。
例题二
例题三
解法(前缀和):
算法思路:
从中⼼下标的定义可知,除中⼼下标的元素外,该元素左边的「前缀和」等于该元素右边的「后缀
和」。
▪
因此,我们可以先预处理出来两个数组,⼀个表⽰前缀和,另⼀个表⽰后缀和。
▪
然后,我们可以⽤⼀个 for
循环枚举可能的中⼼下标,判断每⼀个位置的「前缀和」以及
「后缀和」,如果⼆者相等,就返回当前下标。
例题四
解法(前缀和数组):
算法思路:
注意题⽬的要求,不能使⽤除法,并且要在
O(N)
的时间复杂度内完成该题。那么我们就不能使
⽤暴⼒的解法,以及求出整个数组的乘积,然后除以单个元素的⽅法。
继续分析,根据题意,对于每⼀个位置的最终结果
ret[i]
,它是由两部分组成的:
i.
nums[0] * nums[1] * nums[2] * ... * nums[i - 1]
ii.
nums[i + 1] * nums[i + 2] * ... * nums[n - 1]
于是,我们可以利⽤前缀和的思想,使⽤两个数组 lmul 和 rmul,分别处理出来两个信息:
i.
lmul 表⽰:i 位置之前的所有元素,即 [0, i - 1] 区间内所有元素的前缀乘积,
ii.
rmul 表⽰: i 位置之后的所有元素,即 [i + 1, n - 1] 区间内所有元素的后缀乘积,然后再处理最终结果。
例题五
解法(将前缀和存在哈希表中):
算法思路:
设
i
为数组中的任意位置,⽤
sum[i] 表⽰ [0, i]
区间内所有元素的和。
想知道有多少个「以
i 为结尾的和为 k 的⼦数组」,就要找到有多少个起始位置为 x1, x2, x3... 使得
[x, i] 区间内的所有元素的和为 k
。那么
[0, x] 区间内的和是不是就是 sum[i] - k 了。于是问题就变成:
◦
找到在
[0, i - 1]
区间内,有多少前缀和等于
sum[i] - k 的即可。
我们不⽤真的初始化⼀个前缀和数组,因为我们只关⼼在
i
位置之前,有多少个前缀和等于
sum[i] - k
。因此,我们仅需⽤⼀个哈希表,⼀边求当前位置的前缀和,⼀边存下之前每⼀种
前缀和出现的次数。
例题六
解法(前缀和在哈希表中):
本题需要的前置知识:
•
同余定理
如果
(a - b) % n == 0
,那么我们可以得到⼀个结论:
a % n == b % n
。⽤⽂字叙
述就是,如果两个数相减的差能被 n 整除,那么这两个数对 n 取模的结果相同。
例如:
(26 - 2) % 12 == 0
,那么
26 % 12 == 2 % 12 == 2
。
•
c++
中负数取模的结果,以及如何修正「负数取模」的结果
a.
c++ 中关于负数的取模运算,结果是「把负数当成正数,取模之后的结果加上⼀个负号」。
例如:
-1 % 3 = -(1 % 3) = -1
b.
因为有负数,为了防⽌发⽣「出现负数」的结果,以 (a % n + n) % n
的形式输出保证为正。
例如:
-1 % 3 = (-1 % 3 + 3) % 3 = 2
算法思路:
思路与
560. 和为 K 的⼦数组
这道题的思路相似。
设 i 为数组中的任意位置,⽤
sum[i]
表⽰
[0, i]
区间内所有元素的和。
•
想知道有多少个「以 i
为结尾的可被
k
整除的⼦数组」,就要找到有多少个起始位置为
x1, x2, x3... 使得
[x, i]
区间内的所有元素的和可被
k
整除。
•
设 [0, x - 1]
区间内所有元素之和等于
a
,
[0, i]
区间内所有元素的和等于
b
,可得 (b - a) % k == 0 。
•
由同余定理可得, [0, x - 1]
区间与
[0, i]
区间内的前缀和同余。于是问题就变成:
◦
找到在
[0, i - 1]
区间内,有多少前缀和的余数等于
sum[i] % k
的即可。
我们不⽤真的初始化⼀个前缀和数组,因为我们只关⼼在
i
位置之前,有多少个前缀和等于
sum[i] - k
。因此,我们仅需⽤⼀个哈希表,⼀边求当前位置的前缀和,⼀边存下之前每⼀种前
缀和出现的次数。
例题七
解法(前缀和在哈希表中):
算法思路:
稍微转化⼀下题⽬,就会变成我们熟悉的题:
•
本题让我们找出⼀段连续的区间, 0 和
1
出现的次数相同。
•
如果将 0
记为
-1
,
1
记为
1 ,问题就变成了找出⼀段区间,这段区间的和等于 0
。
•
于是,就和
560. 和为 K 的⼦数组
这道题的思路⼀样 ,设 i 为数组中的任意位置,⽤
sum[i]
表⽰
[0, i]
区间内所有元素的和。 想知道最⼤的「以 i
为结尾的和为
0
的⼦数组」,就要找到从左往右第⼀个
x1
使得
[x1, i] 区间内的所有元素的和为 0 。那么
[0, x1 - 1]
区间内的和是不是就是
sum[i]
了。于是问题就变成:
•
找到在
[0, i - 1] 区间内,第⼀次出现 sum[i] 的位置即可。
我们不⽤真的初始化⼀个前缀和数组,因为我们只关⼼在 i 位置之前,第⼀个前缀和等于
sum[i]的位置。因此,我们仅需⽤⼀个哈希表,⼀边求当前位置的前缀和,⼀边记录第⼀次出现该前缀和的位置。
例题八
⼆维前缀和的简单应⽤题,关键就是我们在填写结果矩阵的时候,要找到原矩阵对应区域的「左上
⻆」以及「右下⻆」的坐标(推荐⼤家画图)
左上⻆坐标:
x1 = i - k
,
y1 = j - k
,但是由于会「超过矩阵」的范围,因此需要对
0 取⼀个 max
。因此修正后的坐标为:
x1 = max(0, i - k), y1 = max(0, j - k)
;
右下⻆坐标:
x1 = i + k
,
y1 = j + k
,但是由于会「超过矩阵」的范围,因此需要对
m - 1 ,以及
n - 1
取⼀个
min
。因此修正后的坐标为:
x2 = min(m - 1, i + k), y2 = min(n - 1, j + k) 。
然后将求出来的坐标代⼊到「⼆维前缀和矩阵」的计算公式上即可~(但是要注意下标的映射关系)
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/很楠不爱3/article/detail/334402
推荐阅读
article
LSTM
图示
和
公式...
LSTM
网络long short term memory,即我们所称呼的
LSTM
,是为了解决长期以来问题而专门设计出来的...
赞
踩
article
计算机
网络安全
技术简答题,
计算机
网络安全
技术简答题...
计算机
网络安全
技术简答题一、1、 为什么 说
网络安全
非常重要?2、 网络本身存在哪些缺陷?3、
网络安全
研究的内容是什么...
赞
踩
article
重磅!
2023
年
“
HW
”
行动
正式开启人员招募!
_
2023
hw
...
5.熟悉常见权限维持工具的使用和基本原理,包括webshell如冰蝎、哥斯拉、内存webshell等,后门工具,如cs、...
赞
踩
article
R软件
安装
教程:64位
window10
,
4.0
.
2
版本_
r
x64
4.0
.
2
...
一、R软件
安装
包下载(1)百度搜索进入Bing官网(
2
)通过Bing搜索:R p
r
oject进入R官网(点击:R: Th...
赞
踩
article
linux
tar
显示进度,
Linux
常用命令
——
tar
...
Linux
常用命令
——
tar
tar
文件是几个文件和(或)目录在一个文件中的集合。这是创建备份和归档的佳径。
tar
使用...
赞
踩
article
【
HarmonyOS
】
js
文件常见
的
数组
操作1_
harmonyos
怎么改变
数组
里面
的
全部值...
讲述了.
js
文件中
数组
长度
的
读取,
数组
元素
的
打印、删除和添加_
harmonyos
怎么改变
数组
里面
的
全部值harmony...
赞
踩
article
报错:zsh: command not found:
vue
以及
code
EACCES
npm
ER...
npm
全局安装报错_
code
eacces
npm
err
!
syscall
mkdir
npm
err
!
path
/...
赞
踩
article
mac
挂载
阿里
云盘
做本地盘【
webdav
-
aliyundriver
】【CloudMounter】_如...
mac
挂载
阿里
云盘
做本地盘_如何将
阿里
云盘
在
mac
电脑
挂载
为
webdav
如何将
阿里
云盘
在
mac
电脑
挂载
为 we...
赞
踩
article
【
安装
记录】
Centos7.6
下载
安装
配置教程(十分详细)_
centos
下载
...
Centos7.6
安装
过程,已附
安装
包和
下载
地址,十分详细_
centos
下载
centos
下载
...
赞
踩
article
Android
Studio
控制台
输出中文
乱码
问题...
1.找到studio的安装目录下的studio64.exe.vmoptions启动配置文件;2.打开文件,最后一行添加 ...
赞
踩
article
Web
安全漏洞
之
XSS
攻击
_
xss
攻击
风险...
XSS
(Cross-Site Scripting)又称跨站脚本,
XSS
的重点不在于跨站点,而是在于脚本的执行。
XSS
是一...
赞
踩
article
【
Android
11
】使用
Android
Studio
调试系统应用之
Settings
移植(四):编...
基于
Android
11
,详解使用
Android
Studio
调试系统app的过程,之前完整了
android
9的系列文...
赞
踩
article
概率
与
统计
里
的
重要
概念
_
统计
与
概率
领域
的
核心
概念
...
1、大数定理参考资料:http://zh.wikipedia.org/wiki/%E5%A4%A7%E6%95%B0%E...
赞
踩
article
vmware
下载
安装
,
及创建新虚拟机流程_
vmware
百度网
盘
下载
链接...
第一步
下载
好的文件直接运行
,
按照提示点击下一步
,
遇到安装路径的时候
,
建议修改下路径
,
最后把注册码写上就可以免费试用了。由...
赞
踩
article
无人机
群
全局
一致性
后端
优化
...
目的:不同
无人机
看到同一个路标点时,可以构建重投影误差来
优化
位姿。重点学习参考vins前端图像跟踪。
无人机
群
全局
一致性
后...
赞
踩
article
uni
-
app
的
爬坑记
_
uni
.
hidekeyboard
()
不
生效...
1、input
的
placeholder样式无法直接覆盖使用placeholder-class属性设置一个类名,再用该类名...
赞
踩
article
ADB常用
命令
_
adb
启动
应用
命令
...
一些常用ADB
命令
,记录便于查阅使用。_
adb
启动
应用
命令
adb
启动
应用
命令
前言 一些常用AD...
赞
踩
article
详解
SQL
慢
查询
_
show
variables
like
'%
slow%
';...
查询
mysql的操作信息
show
status -- 显示全部mysql操作信息
show
status
like
"co...
赞
踩
article
高数教材班复习
Hint
(
3.1
-
3.6
)
_
hint
数学什么意思...
Chapter 3Lesson 1
Hint
1{
Hint
}^1
Hint
1:微分中值定理——联系函数和导数费马引理:对于邻域...
赞
踩
article
Qt
设计师
-
Qt
Designer
基础
控件
介绍...
Layouts:Vertical Layout:垂直布局Horizontal Layout:水平布局Gird Layou...
赞
踩
相关标签
计算机网络安全技术简答题
网络协议
网络安全
系统安全
web安全
安全威胁分析
网络攻击模型
计算机网络
linux tar 显示进度
harmonyos
vue.js
npm
鼓捣鼓捣
centos
linux
运维
vmware
java
android
xss
前端
android.bp
build.gradle
Settings