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

wordpress 侧边栏轮播北京seo培训机构

wordpress 侧边栏轮播,北京seo培训机构,写作墨问题 网站,广州什么地方好玩优选算法第四讲&#xff1a;前缀和模块 1.[模板]前缀和2.【模板】二维前缀和3.寻找数组的中心下标4.除自身以外数组的乘积5.和为k的子数组6.和可被k整除的子数组7.连续数组8.矩阵区域和 1.[模板]前缀和 链接: link #include <iostream> #include <vector> using…

优选算法第四讲:前缀和模块

  • 1.[模板]前缀和
  • 2.【模板】二维前缀和
  • 3.寻找数组的中心下标
  • 4.除自身以外数组的乘积
  • 5.和为k的子数组
  • 6.和可被k整除的子数组
  • 7.连续数组
  • 8.矩阵区域和

1.[模板]前缀和

链接: link
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;int main() {int n = 0, q = 0;cin >> n >> q;vector<int> arr(n+1);//开辟一个n+1的数组for(int i = 1; i <= n; i++) cin >> arr[i];//创建一个前缀和数组。vector的构造会自己初始化vector<long long> dp(n+1);//更新前缀和数组for(int i = 1; i<=n; i++) dp[i] = dp[i-1] + arr[i];//直接使用前缀和数组进行返回即可int l = 0, r = 0;while(q--){cin >> l >> r;cout << dp[r] - dp[l-1] << endl;//直接输出结果即可}return 0;
}

2.【模板】二维前缀和

链接: link
在这里插入图片描述

3.寻找数组的中心下标

链接: link
在这里插入图片描述

class Solution {
public:int pivotIndex(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);//1.分别求出前缀和、后缀和数组for(int i = 1; i<n; i++)f[i] = f[i-1] + nums[i-1];for(int i = n-2; i>=0; i--)g[i] = g[i+1] + nums[i+1];//2.使用前缀和、后缀和数组for(int i = 0; i<n; i++)if(f[i] == g[i]) return i;return -1;}
};

4.除自身以外数组的乘积

链接: link
在这里插入图片描述

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);//1.先求出f和g数组f[0] = 1;//注意:细节问题一定要处理g[n-1] = 1;for(int i = 1; i<n; i++)f[i] = f[i-1] * nums[i-1];for(int i = n-2; i>=0; i--)g[i] = g[i+1] * nums[i+1];//2.使用两数组vector<int> ret(n);for(int i = 0; i<n; i++)ret[i] = f[i] * g[i];return ret;}
};

5.和为k的子数组

链接: link
在这里插入图片描述

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0] = 1;int sum = 0, ret = 0;for(auto e : nums){sum += e;//计算当前位置的前缀和if(hash.count(sum - k)) ret += hash[sum-k];hash[sum]++;}return ret;}
};

6.和可被k整除的子数组

链接: link
在这里插入图片描述

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0] = 1;//细节问题:如果nums的和可被k整除,那么也要将次数+1int sum = 0, ret = 0;for(auto e : nums){sum += e;int r = (sum%k + k) % k;//求余数的方法if(hash.count(r)) ret += hash[r];//如果sum%k = 前缀和%k,那么就可以被k整除hash[r]++;}return ret;}
};

7.连续数组

链接: link
在这里插入图片描述

class Solution {
public:int findMaxLength(vector<int>& nums) {unordered_map<int, int> hash;hash[0] = -1;int sum = 0, ret = 0;for(int i = 0; i<nums.size(); i++){sum += nums[i] == 0 ? -1 : 1;//我们不需要将数组的0改为1,只需要在加的这个部分加-1就行了if(hash.count(sum)) ret = max(ret, i-hash[sum]);else hash[sum] = i;//此时存储的应该是下标}return ret;}
};

8.矩阵区域和

链接: link
在这里插入图片描述

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int m = 0, n = 0;m = mat.size();n = mat[0].size();//先计算出前缀和数组vector<vector<int>> dp(m+1, vector<int>(n+1));for(int i = 1; i<=m; i++)for(int j = 1; j<=n; 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>> ret(m, vector<int>(n));for(int i = 0; i<m; i++){for(int j = 0; j<n; j++){int x1 = 0, y1 = 0, x2 = 0, y2 = 0;x1 = max(0, i-k) + 1;y1 = max(0, j-k) + 1;x2 = min(m-1, i+k) + 1;y2 = min(n-1, j+k) + 1;ret[i][j] = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1];}}return ret;}
};
http://www.ds6.com.cn/news/73424.html

相关文章:

  • 网站建设 局部放大镜功能seo团队
  • asp网站开发书籍互联网销售是什么意思
  • 企业网站栏目结构网络推广外包公司干什么的
  • 青岛找网站建设公司百度热搜高考大数据
  • 可以免费做网站吗seo关键词排名优化品牌
  • 如何招聘软件网站开发人员百度大数据分析
  • 西安可以做网站的北京seo网络优化招聘网
  • 鹿泉区城乡建设局网站百度官网首页入口
  • 大型网站的例子sem竞价托管
  • 网站深圳优化建设武汉网站seo推广公司
  • 插画师个人网站是怎么做的seo站外优化平台
  • 用dw做网站 主题是哪个收录入口在线提交
  • 做网站怎么赚钱知乎运营商大数据精准营销
  • 电商专业网站建设的毕业设计百度人工服务在线咨询
  • 建设网站终身免费百度浏览器下载
  • 企业网站货物查询怎么做搜索优化软件
  • htm5网站建设抖音搜索seo
  • 深圳网站建设 套餐电商网站开发平台有哪些
  • 深圳微信网站建设报价小程序排名优化
  • 三合一网站建设媒体软文推广平台
  • 网站收录后然后怎么做全网推广网站
  • 动态网站开发技术教材电脑优化软件
  • 什么网站做兼职靠谱最新的国际新闻
  • 网站工商标识做网站的公司负责高州网站seo
  • 做任务挣钱的网站app怎么做网络推广最有效
  • 网站建设难么今日特大新闻新事
  • 网站建设的三大原则怎么提高关键词搜索排名
  • 赣州专业做网站推广软件赚钱
  • 建立网站大概需要多少钱2345网址大全设主页
  • 如何建一个个人网站引擎搜索对人类记忆的影响