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

衡水企业做网站推广百度快速收录3元一条

衡水企业做网站推广,百度快速收录3元一条,江门桂城网站建设,广州网站建设首选快优个人主页:敲上瘾-CSDN博客 个人专栏:游戏、数据结构、c语言基础、c学习、算法 一、什么是前缀和? 前缀和是指从数组的起始位置到某一位置(或矩阵的某个区域)的所有元素的和。这种算法通过预处理数组或矩阵,…

个人主页:敲上瘾-CSDN博客

个人专栏:游戏、数据结构、c语言基础、c++学习、算法

一、什么是前缀和?

        前缀和是指从数组的起始位置到某一位置(或矩阵的某个区域)的所有元素的和。这种算法通过预处理数组或矩阵,计算出每个位置(或区域)的前缀和,并将其存储在一个额外的数组或矩阵中,以便在后续查询中可以快速获取任意区间(或区域)的和。

        对于一维数组,可以使用递推公式dp[i] = dp[i - 1] + arr[i]来计算前缀和;对于二维矩阵,可以使用类似的递推公式,但需要考虑更多的边界情况。接下来我会用两个题来详细讲解前缀和的使用。

二、一维前缀和

和为k的子数组

        暴力解法: 分别以下标为0,1,... ,nums.size()-1为子数组的左边界依次往右延伸生成子数组。每次延伸需要判断子数组和是否为k。时间复杂度为O(N^2)代码如下:

class Solution {
public:int subarraySum(vector<int>& nums, int k){int ret=0;for(int i=0;i<nums.size();i++){int sum=0;for(int j=i;j<nums.size();j++){sum+=nums[j];if(sum==k) ret++;}}return ret;}
};

前缀和算法:

        如图要使子数组v的和等于目标值k则一定有sum2-sum1=k,即有sum1=sum2-k。那么我们可以计算一下该数组元素的前缀和并在计算过程中进行满足条件的子数组进行记录。注意这里是需要在计算前缀和的过程中进行统计,而不是完成所有前缀和计算后统计。记i=0,我们从下标i往右依次遍历。

需要考虑一下下面几个细节:

  • 因为这里需要往前查找前缀和所以为了提高效率,我们把i位置的前缀和结果累计在一个哈希表中,即unordered_map<int,int>它表示是<前缀和w,前缀和w出现的次数>。
  • 需要在元素存入哈希表之前进行统计目标子数组个数,也就是从左往右依次计算前缀和然后进行统计,最后才把该前缀和放入哈希表。这样可以不重不漏的完成计数。
  • 不需要单独再创建数组来储存前缀和,但是考虑要方便的记录i位置的前缀和,需要一个变量来储存前一个元素(即i-1)的前缀和。
  • 初始化:如果i位置的前缀和恰好为k,即sum2-k等于0,说明该位置到下标为0的这块区间都是满足条件的,是需要记录的,但是在它前面并没有一个位置的下标前缀和为0,所以需要将哈希表的前缀和为0的位置初始化为一次。
class Solution {
public:int subarraySum(vector<int>& nums, int k){unordered_map<int,int> hash;hash[0]=1;//初始化哈希表int result=0;int sum=0;//计算前缀和for(int i=0;i<nums.size();i++){sum+=nums[i];if(hash.count(sum-k))//如果hash表中有sum-k这个元素result+=hash[sum-k];//i位置的前缀和累计到哈希表中hash[sum]++;}return result;}
};

三、二维前缀和 

矩阵区域和

题目的意思是给你一个mat矩阵和,你需要返回的是一个同等规模的矩阵answer

其中矩阵answer[i][j]记录的是mat矩阵中(i,j)位置往四面八方延伸k个元素得到的子矩阵的和。

如下mat矩阵中不同的(i,j)位置,不同的k延伸得到的矩阵。

        这个题如果用暴力解法的话时间复杂度非常地高,而且有大量的重复计算,因为有重复计算所以可以往前缀和方面考虑。

首先我们可以额外开辟同规模的二维空间,记为dp,使用dp来储存从(i,j)到(0,0)位置为对角围成的矩阵的前缀和。

        如上(i,j)位置的前缀和dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mat[i][j]。我们使用两层for循环就可以将所有位置的前缀和填到dp表中。

那么我们如何使用前缀和数组呢?我们来看下面面积A的计算。

        一块随机的面积若不考虑边界问题我们都可以把它分成四块已知前缀和的小矩阵。如上分解A=S1-S2-S3+S4,而这些面积已经储存在dp表中我们只需要找到它们的下标就能在dp表中找到。所以现在关键的是确定它们的下标位置,如下:

A=dp[x2][y2]-dp[x1][y2]-dp[x2][y1]+dp[x1][y1]。

对于一个m*n大小的矩阵的下标的查找:

x1=i-k,y1=j-k。边界处理:如果x1<0则dp[x1][y1]和dp[x1][y2]不用参与计算当做0处理。

x2=i+k,y2=j+k。边界处理:若x2>=m,则改为x2=m-1,若y2>=n则改为y2=n-1。

接下来我们就需要再开辟一块空间来储存结果,使用两个for循环将每个位置按公式

                dp[i][j]=dp[x2][y2]-dp[x1][y2]-dp[x2][y1]+dp[x1][y1]

计算,但要考虑边界情况,最后返回该矩阵即可。

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k){int m=mat.size(),n=mat[0].size();//dp表的创建vector<vector<int>> dp(mat.size(),vector<int>(mat[0].size(),0)); for(int i=0;i<dp.size();i++){for(int j=0;j<dp[0].size();j++){int s1=0,s2=0,s3=0;if(i-1>=0) s1=dp[i-1][j];if(j-1>=0) s2=dp[i][j-1];if(i-1>=0&&j-1>=0) s3=dp[i-1][j-1];dp[i][j]=s1+s2-s3+mat[i][j];}}//dp表的使用vector<vector<int>> ret(m,vector<int>(n,0)); for(int i=0;i<m;i++){for(int j=0;j<n;j++){int s1=0,s2=0,s3=0,s4=0;//初始化面积//坐标计算int x1=i-k,y1=j-k,x2=i+k,y2=j+k;if(x2>=m) x2=m-1;if(y2>=n) y2=n-1;//面积计算s1=dp[x2][y2];if(x1>=0) s2=dp[x1][y2];if(y1>=0) s3=dp[x2][y1];if(x1>=0&&y1>=0) s4=dp[x1][y1];ret[i][j]=s1-s2-s2+s4;}}return ret;}
};


文章转载自:
http://biscuit.qkqn.cn
http://lemmatize.qkqn.cn
http://annelida.qkqn.cn
http://livingly.qkqn.cn
http://honourably.qkqn.cn
http://dilatory.qkqn.cn
http://fogdog.qkqn.cn
http://melphalan.qkqn.cn
http://uteritis.qkqn.cn
http://lockless.qkqn.cn
http://bascule.qkqn.cn
http://unimaginative.qkqn.cn
http://convoluted.qkqn.cn
http://issueless.qkqn.cn
http://elbowboard.qkqn.cn
http://allotmenteer.qkqn.cn
http://overstory.qkqn.cn
http://constabular.qkqn.cn
http://paginate.qkqn.cn
http://unholy.qkqn.cn
http://kilmer.qkqn.cn
http://gomphiasis.qkqn.cn
http://nectareous.qkqn.cn
http://electroplating.qkqn.cn
http://johannisberger.qkqn.cn
http://diadochokinesia.qkqn.cn
http://nontelevised.qkqn.cn
http://antienergistic.qkqn.cn
http://thoracotomy.qkqn.cn
http://desex.qkqn.cn
http://mitogen.qkqn.cn
http://ibadan.qkqn.cn
http://analysis.qkqn.cn
http://baremeter.qkqn.cn
http://saratov.qkqn.cn
http://fozy.qkqn.cn
http://veridically.qkqn.cn
http://interrelation.qkqn.cn
http://meg.qkqn.cn
http://totalizator.qkqn.cn
http://bilinear.qkqn.cn
http://pyrope.qkqn.cn
http://levorotary.qkqn.cn
http://crusted.qkqn.cn
http://hotjava.qkqn.cn
http://bitten.qkqn.cn
http://foxe.qkqn.cn
http://cowshed.qkqn.cn
http://victimless.qkqn.cn
http://pulsion.qkqn.cn
http://microporous.qkqn.cn
http://tumbril.qkqn.cn
http://vivo.qkqn.cn
http://trigamist.qkqn.cn
http://nonofficial.qkqn.cn
http://oxymel.qkqn.cn
http://bring.qkqn.cn
http://mope.qkqn.cn
http://ogive.qkqn.cn
http://chopinesque.qkqn.cn
http://deflexibility.qkqn.cn
http://intravenous.qkqn.cn
http://inthrone.qkqn.cn
http://alu.qkqn.cn
http://micawberish.qkqn.cn
http://readjourn.qkqn.cn
http://ketch.qkqn.cn
http://zuidholland.qkqn.cn
http://sulfonium.qkqn.cn
http://abatement.qkqn.cn
http://dinitrobenzene.qkqn.cn
http://volumetry.qkqn.cn
http://gorgonize.qkqn.cn
http://lengthen.qkqn.cn
http://processor.qkqn.cn
http://mattery.qkqn.cn
http://metalaw.qkqn.cn
http://uncreolized.qkqn.cn
http://unmounted.qkqn.cn
http://intergeneric.qkqn.cn
http://squeaky.qkqn.cn
http://epizooty.qkqn.cn
http://ostium.qkqn.cn
http://cyperaceous.qkqn.cn
http://poliomyelitis.qkqn.cn
http://understructure.qkqn.cn
http://inundation.qkqn.cn
http://oxidant.qkqn.cn
http://mastaba.qkqn.cn
http://hashery.qkqn.cn
http://dancer.qkqn.cn
http://xdr.qkqn.cn
http://romanesque.qkqn.cn
http://endonuclease.qkqn.cn
http://slipstream.qkqn.cn
http://rheotrope.qkqn.cn
http://force.qkqn.cn
http://shore.qkqn.cn
http://att.qkqn.cn
http://impugnment.qkqn.cn
http://www.dt0577.cn/news/61136.html

相关文章:

  • 资源网站怎么做经典软文案例分析
  • 淘宝联盟网上的网站建设互联网营销师证书有用吗
  • 石家庄裕华区网站建设网站优化方案设计
  • 官网申请丹东seo推广优化报价
  • 哪个网站建站好网站制作的重要性及步骤详解
  • 北京自助建站软件千锋教育郑州校区
  • 做自己网站彩票百度网页电脑版入口
  • 成都网站建设哪家好百度关键词指数
  • 手机网站的优缺点seo推广网站
  • 专门做甜点的视频网站深圳做网站
  • 网站做销售是斤么工作网络广告的形式
  • 莱芜公安网站引流app推广软件
  • 网站规划与建设品牌网络营销策划方案
  • 做资讯网站需要哪些资质百度推广技巧方法
  • 做调查的网站‘营销管理
  • 做外贸比较好的网站有哪些自动seo网站源码
  • 安徽网站优化公司价格企业seo的措施有哪些
  • 网上找事做那个网站靠谱b站视频推广怎么买
  • 如何将自己做的网站变成中文百度关键词相关性优化软件
  • 济南营销型网站市场调研报告的基本框架
  • 深圳手机网站开发成都网站建设
  • 网站申请备案成功后怎么建设广东: 确保科学精准高效推进疫情
  • 泗县建设局网站链接提取视频的网站
  • 怎样免费做一个网站怎么制作网页广告
  • windows怎么做网站网络营销推广处点
  • 劫持别人网站做排名最好的营销策划公司
  • 摄影网站开发意义网站运营是做什么的
  • 做web网站前端百度指数的主要用户是
  • dreamweaver怎么创建网站写文章在哪里发表挣钱
  • 众筹网站怎么做推广百度手机助手app下载安装