当前位置: 首页 > wzjs >正文

服务二级公司网站建设重庆市建设工程信息网官网招投标公告

服务二级公司网站建设,重庆市建设工程信息网官网招投标公告,企业官方网站怎么做,微信软文案例利用前缀和:快速找到所有满足要求的子数组数量&&变种问题 何为前缀和:对数组元素做累加和如何用前缀和在一次O(N)找到所有符合要求的子数组数量?步骤 1 :求出前缀和(见第一节)步骤 2 :在…

利用前缀和:快速找到所有满足要求的子数组数量&&变种问题

  • 何为前缀和:对数组元素做累加和
  • 如何用前缀和在一次O(N)找到所有符合要求的子数组数量?
    • 步骤 1 :求出前缀和(见第一节)
    • 步骤 2 :在前缀和上进行遍历,找到所有目标值
    • 步骤 3 :循环次数优化
    • 步骤 4 :初始值
    • 实现
  • 变种问题(同类问题,加一些帽子)
    • 步骤 1 :转化问题
    • 步骤 2 :套用上一题
    • 步骤 3 :实现

何为前缀和:对数组元素做累加和

按照以下示例展示前缀和计算方法:
注意!!!!:前缀和数组第一个元素永远都是0,累加和从第二处开始添加

应用场景:求任意子数组 / 求数组内任意一个连续范围内 的和

初始状态:
1、nums = [1, 1, -1, 1, -1]
2、前缀和数组 s = [0, 0, 0, 0, 0, 0]。这是因为我们需要一个多一位的数组,其中 s[0] = 0 代表没有元素的前缀和。

计算前缀和数组 s:
迭代1:
nums[0] = 1,计算 s[[1]]= s[0] + 1 = 0 + 1 = 1,前缀和更新为 s = [0, 1, 0, 0, 0, 0]。
迭代2:
nums[[1]] = 1,计算 s[[2]] = s[[1]] + 1 = 1 + 1 = 2,前缀和更新为 s = [0, 1, 2, 0, 0, 0]。
迭代3:
nums[[2]] = -1,计算 s[[3]] = s[[2]] + (-1) = 2 - 1 = 1,前缀和更新为 s = [0, 1, 2, 1, 0, 0]。
迭代4:
nums[[3]] = 1,计算 s[[4]] = s[[3]] + 1 = 1 + 1 = 2,前缀和更新为 s = [0, 1, 2, 1, 2, 0]。
迭代5:
nums[[4]] = -1,计算 s[[5]] = s[[4]] + (-1) = 2 - 1 = 1,前缀和更新为 s = [0, 1, 2, 1, 2, 1]。

如何用前缀和在一次O(N)找到所有符合要求的子数组数量?

我们以 力扣560. 和为 K 的子数组 为例对该问题进行求解
在这里插入图片描述

步骤 1 :求出前缀和(见第一节)

步骤 2 :在前缀和上进行遍历,找到所有目标值

如何在前缀和上找到任意一个子数组的和:s[j] - s[i] = SUM
本题要求和为K,所以转化成:s[j] - s[i] = k
1、一个朴素的想法就是,枚举J的位置,再从0处枚举i,找到一个前缀和s[i]的值满足:s[i] = s[j] - k
2、但是显而易见的,复杂度=O(n^2),对于本题而言不可以,那么有没有什么办法可以省略掉第二次循环?
3、第二次循环的目的是什么?找到满足要求的所有s[i]的数量,所以我们动态维护就好了,采用一个字典维护出现过的所有前缀和的值以及他们的出现次数,这样就可以在O(1)的时间内得到满足要求的数量
4、这时,只需要遍历完所有元素,累加出的和即为答案。

步骤 3 :循环次数优化

很显然,对于每次的s[j]前面的元素,我已经不需要存储在数组中,只需要维护在HashMap中即可,我每次先更新此处的前缀和值,再根据s[i] = s[j] - k 找到s[i]的值,最后去HashMap中找到s[i]出现了几次,最后做累加即可。所以显而易见的,可以边算前缀和边统计

步骤 4 :初始值

满足上述计算条件,需要从nums[0]也就是s[1]开始,所以要把s[0]=0初始状态加到HashMap中,即初始值HashMap[0] = 1

实现

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int ans = 0;unordered_map<int, int> cnt{ { 0,1 } };//注意写法int s = 0;for (int x : nums) {s += x;//先计算此处前缀和的值ans += cnt.find(s - k) == cnt.end() ? 0 : cnt[s - k];//在寻找s[i]出现几次,这里注意,不要直接调用cnt[s - k],因为没有cnt[s - k]的话会插入cnt[s]++;//s出现次数多一次,在字典中为其更新}return ans;}
};

变种问题(同类问题,加一些帽子)

我们以 力扣2588. 统计美丽子数组数目 为例对该问题进行求解
在这里插入图片描述

步骤 1 :转化问题

很明显的,从十进制看不出任何规律,并且,题目中明确提示了二进制,所以把例一转化一下,把每个数都写成二进制:

													100011001010100

​我们此时再看例一中两个符合要求的组,很明显的,以[4,3,1,2,4]为例,我们发现各个列都是2个1,另一个美丽子数组也同样。所以,很明显,体重操作就是执行异或操作,只要选择的数如上述摆放,每一列偶数个1就满足要求。

换句话说:满足要求的子数组,其所有元素的异或和 = 0

所以本题转化为:找到满足子数组所有元素异或和 = 0的子数组个数

步骤 2 :套用上一题

把上一题中 k 设置为 0 即可
+ 运算改为 ^ 即可

步骤 3 :实现

class Solution {
public:long long beautifulSubarrays(vector<int>& nums) {long long ans = 0;unordered_map<int, int> cnt{{0, 1}};int s = 0;for (int x : nums) {s ^= x;ans += cnt[s - 0]++;}return ans;}
};

文章转载自:

http://h7Skd27Q.wqtzs.cn
http://xIQUpvaz.wqtzs.cn
http://jFrxtZPD.wqtzs.cn
http://JSgfw4Cv.wqtzs.cn
http://ftNVWWmX.wqtzs.cn
http://J5X1HJro.wqtzs.cn
http://sRxgQLnw.wqtzs.cn
http://3OnBCQDV.wqtzs.cn
http://FpHCVDp8.wqtzs.cn
http://d1XByFFc.wqtzs.cn
http://AKfcGZD0.wqtzs.cn
http://Bd7P8Hn9.wqtzs.cn
http://408WlEtE.wqtzs.cn
http://mhqZPaW2.wqtzs.cn
http://kngOFcU6.wqtzs.cn
http://SqRBQq0e.wqtzs.cn
http://P0itHIDK.wqtzs.cn
http://37I42PV3.wqtzs.cn
http://ZyLy72xJ.wqtzs.cn
http://2xMPKjuA.wqtzs.cn
http://9P6JuYEA.wqtzs.cn
http://eKGzCfQ0.wqtzs.cn
http://kzhvhXze.wqtzs.cn
http://vplN7r6d.wqtzs.cn
http://NsLmQGtG.wqtzs.cn
http://mmgPFhm2.wqtzs.cn
http://Hn8jw6bp.wqtzs.cn
http://h86cOyWp.wqtzs.cn
http://MJsvF9Tq.wqtzs.cn
http://923UT6sS.wqtzs.cn
http://www.dtcms.com/wzjs/709968.html

相关文章:

  • 个人简历模板网站网站备案 更改ip
  • 电子商务网站建设第二版论文上海网站建设安全
  • php与python做网站软件服务商
  • 西安的网站制作公司明星做代言的购物网站0
  • 无限建站系统cps推广
  • python做后台开发移动网站云南工程建设信息网官网
  • 网站建设 上海网站wordpress预加载插件
  • 网站制作 牛商网建网站哪家好
  • 网站logo一般多大建设网站需求
  • 龙岗网站建设_公司推广青海省住房建设厅网站首页
  • 小挑可以做网站吗软件商店下载免费版
  • 视频网站策划wordpress 采集蜘蛛
  • 怎么做北京赛网站网站建设咨询公司排名
  • 英德市住房城乡建设网站福建泉州做网站公司哪家好
  • 后台给网站做关键字室内设计联盟手机版
  • 中卫网站推广外包服务网站会对特殊的ip做跳转
  • 网站制作难吗wordpress管理媒体库插件
  • 网站引导页分为三个板块设计风格招商网网站建设方案
  • 怎样创建网站或者网址网站制作 商务
  • 北京网站建设公司兴田德润电话有诗意的广告公司名字
  • 链家做网站和手机app花了多少钱深圳专业高端网站建设多少钱
  • 徐州市制作网站的公司高端品牌名字怎么取
  • 网站开发公司创业策划二手交易平台的网站怎么做
  • 太原做网站推广的公司网站是陕西省城乡建设综合服务中心
  • 网站建设重点步骤wordpress无法连接数据库连接
  • 温州建设管理处网站有关网站建设的参考书
  • 榆林市 网站建设青州网站制作哪家好
  • 网站实名认证需要什么免费商标图案设计logo
  • 南通网站建设招聘wordpress如何使用
  • 成都网站设计成功柚v米科技重庆装修公司口碑排名