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

移动端网站和app区别搜索热度和搜索人气

移动端网站和app区别,搜索热度和搜索人气,怎么做一网站首页,毕业设计网站只做前端行不行文章目录 前言和为k的子数组思路 和可被k整除的子数组思路 连续数组思路 矩阵区域和思路 总结总结 前言 本专栏上篇博客带大家了解了前缀和的有关模版以及习题的训练 从一维到二维的拓展,今天我们继续来练习一下前缀和的有关算法 fellow me 和为k的子数组 思路 设 i…

在这里插入图片描述

文章目录

  • 前言
  • 和为k的子数组
    • 思路
  • 和可被k整除的子数组
    • 思路
  • 连续数组
    • 思路
  • 矩阵区域和
    • 思路
  • 总结
  • 总结

前言

本专栏上篇博客带大家了解了前缀和的有关模版以及习题的训练
从一维到二维的拓展,今天我们继续来练习一下前缀和的有关算法
fellow me

和为k的子数组

在这里插入图片描述

思路

在这里插入图片描述
设 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 。因此,我们仅需用一个哈希表,一边求当前位置的前缀和一边存下之前每一种前缀和出现的次数。

前缀和和哈希结合起来还是很巧妙的

class Solution 
{
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0] = 1;int sum = 0, ans = 0;for(auto x : nums){sum += x;   if(hash.count(sum - k))  // 判断前面的区间有没有 sum - k{						 // 如果有  前面区间到当前位置就满足条件ans += hash[sum - k];}hash[sum]++;}return ans;}
};

和可被k整除的子数组

在这里插入图片描述

思路

乍一看,好像和上一题差不多,但是又好像有点不同,来处理一下这个整除k吧,把问题转换到上一题
同余定理:
如果 (a - b) % n == 0 ,那么我们可以得到一个结论: a % n == b % n ,用文字叙述就是,如果两个数相减的差能被 n 整除,那么这两个数对 n 取模的结果相同。例如: (26 - 2) % 12 == 0 ,那么 26 % 12 == 2 % 12 == 2
c++ 中负数取模的结果,以及如何修正「负数取模」的结果
–c++ 中关于负数的取模运算,结果是「把负数当成正数,取模之后的结果加上一个负号」
例如: -1 % 3 = -(1 % 3) = -1
因为有负数,为了防止发生「出现负数」的结果,以 (a % n + n) % n 的形式输出保证为正
例如: -1 % 3 = (-1 % 3 + 3) % 3 = 2
这些处理完之后,剩下的就和前面的那个题目一样啦

class Solution 
{
public:int subarraysDivByK(vector<int>& nums, int k) {int sum = 0, ans = 0;unordered_map<int, int> hash;hash[0 % k] = 1;   //  注意不要遗忘 0 这个情况for(auto x : nums){sum += x;  //  算出当前的前缀和int ret = (sum % k + k) % k;  //  修正后的余数if(hash.count(ret)) ans += hash[ret];//  统计结果  hash[ret]++;}return ans;}
};

连续数组

在这里插入图片描述

思路

稍微转化一下题目,把 0 都看成 -1 ,这样就变成 和为 0 的最大长度的子数组
稍微处理一下细节就好啦

class Solution 
{
public:int findMaxLength(vector<int>& nums) {unordered_map<int, int> hash;int sum = 0, ans = 0;hash[0] = -1;  //  不要忘记 0 这个情况for(int i = 0; i < nums.size(); i++){sum += nums[i] == 0 ? -1 : 1;  //  sum前缀和  if(hash.count(sum)) ans = max(ans, i - hash[sum]);//  判断条件 更新anselse									hash[sum] = i;//否则  更新hash }return ans;}
};

矩阵区域和

在这里插入图片描述

思路

二维前缀和的简单应用题,关键就是我们在填写结果矩阵的时候,要找到原矩阵对应区域的「左上角」以及「右下角」的坐标
左上角坐标: 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)
主要就是处理边界问题,以及预处理前缀和后的下标映射问题

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int n = mat.size(), m = mat[0].size();vector<vector<int>> dp(n + 1, vector<int>(m + 1));for(int i = 1; i <= n; i++)//  预处理{for(int j = 1 ; j <= m; j++){dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mat[i - 1][j - 1];}}vector<vector<int>> ans(n, vector<int>(m));  // answer 数组 for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){int x1 = max(0, i - k) + 1, y1 = max(0, j - k) + 1;  //  注意下标映射到 dp数组int x2 = min(n - 1, i + k) + 1, y2 = min(m - 1, j + k) + 1;ans[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1];}}return ans;}
};

总结

总结

前缀和算法通过预处理数组,将区间和查询优化为常数时间,是处理子数组问题的利器。其核心在于利用哈希表动态记录前缀和及其出现次数,将问题转化为查找特定差值或余数,从而高效统计满足条件的子数组。

一维数组中,通过同余定理转换问题(如将整除转化为余数相等)、将元素转换为±1求平衡子数组,展现了前缀和的灵活运用。处理负数取模时,需修正余数保证非负。

对于二维前缀和,需注意矩阵边界的截断处理,通过坐标映射与容斥原理快速计算区域和。

总之,前缀和与哈希表结合,能有效解决多种子数组统计问题,关键在于问题转化与边界处理,提升算法效率的同时降低复杂度。

今天的内容就到这里啦,不要走开,小编持续更新中~~~~

在这里插入图片描述

http://www.dtcms.com/wzjs/197581.html

相关文章:

  • 做一家公司网站要注意哪些宁波网站推广优化哪家正规
  • 渝北集团网站建设百度推广优化
  • 网站集约化建设通知免费的建站平台
  • 上海殷行建设网站推广宣传方式有哪些
  • 打折网站模板网站域名ip查询
  • 外贸企业网站制作如何写推广软文
  • 西三旗网站建设网站优化搜索排名
  • 企业网站html百度云公司网络推广服务
  • 什么是独立站?建网站一般多少钱
  • 苹果cms 建设网站好吗口红的推广软文
  • 建设向58同城的网站黄页网站推广
  • 办公室装修效果图简约大气网络优化的工作内容
  • 电子商务网站建设价格深圳网络推广哪家公司好
  • dedecms 漏洞肇庆seo按天收费
  • wordpress上传到哪seo交流群
  • 如何给网站优化推广赚钱app
  • 夏县网站建设网络营销的渠道有哪些
  • 网站工程专业是什么手机系统优化软件
  • 做h5长图网站网店营销策划方案ppt
  • wordpress 添加用户组搜索引擎优化seo课程总结
  • 商城网站多少钱做创建网站平台
  • 网页制作教程dw泉州百度首页优化
  • 网站建设进度表模板下载网页模板下载
  • 创意灵感的网站怎么开网站平台
  • 找别人做网站靠谱吗福州网seo
  • 兰州百度推广的公司seo短视频入口
  • 出口外贸交易平台网站seo诊断优化方案
  • php笑话网站源码windows优化大师可以卸载吗
  • 个人可以做外贸的网站抖音seo公司
  • 做和别人类似的网站侵权吗如何让百度搜索排名靠前