【C++算法】前缀和

前缀和

  • 题目链接

前缀和icon-default.png?t=O83Ahttps://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId=230&tqId=2021480&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196

  • 算法原理

  • 代码步骤
#include<iostream>
#include<vector>
using namespace std;int main()
{// 读入数据int n, q;cin >> n >> q;vector<int> arr(n + 1);for(int i = 1; i <= n; i++){cin >> arr[i];}// 预处理出来一个前缀和数组vector<long long> dp(n + 1);for(int i = 1; i <= n; i++){dp[i] = dp[i - 1] + arr[i];}// 使用前缀和数组while(q--){int l, r;cin >> l >> r;cout << dp[r] - dp[l - 1] << endl;}return 0;
}

 二维前缀和

  • 题目链接

二维前缀和icon-default.png?t=O83Ahttps://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc?tpId=230&tqId=2023819&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196

  • 算法原理

  • 代码步骤

#include <iostream>
#include <vector>using namespace std;int main()
{// 输入数据int n = 0, m = 0, q = 0;cin >> n >> m >> q;vector<vector<int>> arr(n + 1, vector<int>(m + 1));for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> arr[i][j];}}// 预处理前缀和vector<vector<long long>> ap(n + 1, vector<long long>(m + 1));for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){ap[i][j] = ap[i - 1][j] + ap[i][j - 1] + arr[i][j] - ap[i - 1][j - 1];}}// 使用前缀和int x1 = 0, y1 = 0, x2 = 0, y2 = 0;while(q--){cin >> x1 >> y1 >> x2 >> y2;cout << ap[x2][y2] - ap[x1 - 1][y2] - ap[x2][y1 - 1] + ap[x1 - 1][y1 - 1] << endl;}return 0;
}

 寻找数组的中心下标

  • 题目链接

寻找数组的中心下标icon-default.png?t=O83Ahttps://leetcode.cn/problems/find-pivot-index/

  • 算法原理

  • 代码步骤

class Solution {
public:int pivotIndex(vector<int>& nums) {// 初始化数组int n = nums.size();vector<int> f(n), g(n);// 预处理前缀和和后缀和for(int i = 1; i <= n - 1; 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];}// 使用前缀和和后缀和for(int i = 0; i <= n - 1; i++){if(f[i]==g[i]){return i;}}return -1;}
};

 除自身以外数组的乘积

  • 题目链接

除自身以外数组的乘积icon-default.png?t=O83Ahttps://leetcode.cn/problems/product-of-array-except-self/description/

  • 算法原理

  • 代码步骤

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> f(n), g(n);// 处理细节f[0] = g[n - 1] = 1;for(int i = 1; i <= n -1; 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];}// 使用vector<int> ret(n);for(int i = 0; i <= n - 1; i++){ret[i] = f[i] * g[i];}return ret;}
};

 和为k的子数组

  • 题目链接

和为k的子数组icon-default.png?t=O83Ahttps://leetcode.cn/problems/subarray-sum-equals-k/description/

  • 算法原理

  • 代码步骤

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

 和可被k整除的子数组

  • 题目链接

和可被k整除的子数组icon-default.png?t=O83Ahttps://leetcode.cn/problems/subarray-sums-divisible-by-k/description/

  • 算法原理

  • 代码步骤

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int,int> hashi;hashi[0 % k] = 1;int ret = 0, sum = 0;for(auto a : nums){sum += a;int r = (sum % k + k) % k;if(hashi.count(r)) {ret += hashi[r];}hashi[r]++;}return ret;}
};

 连续数组

  • 题目链接

连续数组icon-default.png?t=O83Ahttps://leetcode.cn/problems/contiguous-array/

  • 算法原理

  • 代码步骤

class Solution {
public:int findMaxLength(vector<int>& nums) {unordered_map<int, int> hash;int len = 0, sum = 0;hash[0] = -1;for(int i = 0; i < nums.size(); i++){sum += nums[i] ? 1 : -1;if(hash.count(sum)){len = max(len, i - hash[sum]);}else{hash[sum] = i;}}return len;}
};

 矩阵区域和

  • 题目链接

矩阵区域和icon-default.png?t=O83Ahttps://leetcode.cn/problems/matrix-block-sum/description/

  • 算法原理

  • 代码步骤

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int 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][j - 1] + dp[i - 1][j] - 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 = max(0, i - k) + 1, y1 = max(0, j - k) + 1;int 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.rhkb.cn/news/425619.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(

【Linux基础】冯诺依曼体系结构操作系统的理解

目录 前言一&#xff0c;冯诺依曼体系1. 为什么有内存结构?2. 对硬件中数据流动的再理解 二&#xff0c;操作系统(Operator System)1. 概念2. 操作系统结构的层状划分3. 操作系统对硬件管理的理解4. 用户与操作系统的关系的理解5. 系统调用和库函数的关系6. 为什么要有操作系统…

eclipse使用 笔记02

创建一个项目&#xff1a; 【File-->New-->Dynamic Web Project】 进入页面&#xff1a; Project name为项目命名 Target runtime&#xff1a;选择自己所对应的版本 finish创建成功&#xff1a; 创建成功后的删除操作&#xff1a; 创建前端界面&#xff1a; 【注意&a…

RT-DETR改进策略:BackBone改进|Swin Transformer,最强主干改进RT-DETR

摘要 在深度学习与计算机视觉领域,Swin Transformer作为一种强大的视觉Transformer架构,以其卓越的特征提取能力和自注意力机制,正逐步引领着图像识别与检测技术的革新。近期,我们成功地将Swin Transformer引入并深度整合至RT-DERT(一种高效的实时目标检测与识别框架)中…

数据结构(7.3_2)——平衡二叉树

平衡二叉树&#xff0c;简称平衡树(AVL树)----树上任一结点的左子树和右子树的高度之差不超过1. 结点的平衡因子左子树高-右子树高 //平衡二叉树结点 typedef struct AVLNode {int key;//数据域int blalance;//平衡因子struct AVLNode* lchild, * rchild; }AVLNode,*AVLTree; …

【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战

文章目录 摘要安装基础环境新建虚拟环境安装pytorch安装openmim、mmengine、mmcv安装 MMDetection验证安装配置OV-DINO环境 MMDetection的MM-Grounding-DINO详细介绍测试结果Zero-Shot COCO 结果与模型Zero-Shot LVIS ResultsZero-Shot ODinW&#xff08;野生环境下的目标检测&…

【网络安全】Node.js初探+同步异步进程

未经许可,不得转载。 文章目录 Node.js 基础介绍NPM 包管理安装同步与异步fs 模块示例child_process 模块Node.js 基础介绍 Node.js 是运行在服务器端的 JavaScript 环境。它基于 Chrome 的 V8 引擎,拥有高效的执行性能。Node.js 采用事件驱动的 I/O 模型,使得它在处理高并…

Java笔记 2 java概述和基础知识

第2章 Java概述与基础知识 Java 历史 Java技术体系平台 Java 重要特点 Java 虚拟机[JVM] JDK&#xff0c;JRE JDK 基本介绍 JRE 基本介绍 JDK、JRE 和JVM 的包含关系 Java 快速入门 注意细节 Java 转义字符 Java 常用的转义字符 注释(comment) Java 中的注释类型 关于文档注释 …

java多线程编程示例

程序功能 程序展示了 Java 中如何使用多线程来并行执行任务。具体功能如下&#xff1a; 程序创建了三个线程&#xff0c;每个线程执行相同的任务类 Task。 每个线程在运行时输出自身名称&#xff0c;并模拟执行五次任务&#xff0c;每次任务间隔 1 秒。 主线程在启动这三个线程…

「Next.js中文文档」网站发布

大家好&#xff0c;我是程普&#xff08;weijunext&#xff09;&#xff0c;我联合“阿伟dev”搭建了一个「Next.js 中文文档」网站&#x1f447; 这个网站我们设计得很特别&#xff1a; 样式很特别 我们模仿 Next.js 官方网站样式&#xff0c;努力做到除了语言不同&#xff…

基于PHP的丽江旅游管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的丽江旅游管理系统 一 介绍 此丽江旅游系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别&#xff1f;⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别&#xff1f;⭐️⭐️⭐️ArrayList 和 Vector 区别&#xff1f;⭐️⭐️ArrayList 的扩容机制&#xff1f;⭐️⭐️⭐️ Qu…

Nginx从入门到入土(一):DNS域名解析

前言 hostName&#xff0c;在Linux系统上是一个命令&#xff0c;用来显示和设置系统的主机名称。其实它就是域名。 常见的域名有我们熟悉的taobao.com;baidu.com等等。 我们在地址栏输入baidu.com 进入的就是此页面。我们看到地址栏里显示的是www.baidu.com 。 注意&#xf…

机器人相关知识的本身和价值

简要将人类简史分为 农业工业信息智能 四个时代。 在信息时代&#xff0c;知识本身就可以等同于价值。 常识看&#xff0c;学历可以变现&#xff0c;高品质文凭能极大概率获得工资远远高于平均值的工作机会。 在智能时代&#xff0c;知识本身毫无价值&#xff0c;知识的应…

Android SPN/PLMN 显示逻辑简介

功能描述 当设备驻网后(运营商网络),会在状态栏、锁屏界面、下拉控制中心显示运营商的名称。 此名称来源有两种: 1、SPN(Service Provider Name) 2、PLMN (Public Land Mobile Name) 功能AOSP默认逻辑SPN提供SIM卡的运营商名称预置在SIM EF中,SIM卡发行运营商名称…

SOCKS4和SOCKS5的区别是什么?

SOCKS4和SOCKS5是两种常用的网络代理协议&#xff0c;它们在功能、性能和应用场景上存在一些关键的区别。以下是对这两种协议区别的详细解析&#xff1a; 1. 支持的协议类型 SOCKS4&#xff1a;只支持TCP协议&#xff08;传输控制协议&#xff09;。这意味着SOCKS4代理只能用…

面向超万卡集群的新型智算技术方案

面向超万卡集群的新型智算技术白皮书 超万卡集群将有助于压缩大模型训练时间&#xff0c;实现模型能力的快速迭代&#xff0c;并及时对市场趋势作出应对。然而&#xff0c;如何在超万卡集群中实现高效的训练&#xff0c;并长期保持训练过程的稳定性&#xff0c;是将大模型训练扩…

Java入门,初识Java

Java背景知识 Java是早期美国 sun 公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。Java早期称为Oak&#xff08;中文翻译为&#xff1a;橡树&#xff09;&#xff0c;后期改名为Java。&#xff08;因为当时sun公司门口有很多…

【C语言必学知识点六】自定义类型——联合体与枚举

联合体与枚举 导读一、联合体1.1 联合体的声明1.2 联合体中的内存对齐1.3 联合体与结构体1.3.1 相同点1.3.2 不同点 1.4 联合体的使用1.5 小结 二、枚举2.1 枚举类型的声明2.2 枚举类型的内存分配2.2.1 常量的分类2.2.2 #define定义的标识符常量2.2.3 枚举常量 2.3 枚举类型的使…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…