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

算法笔记—前缀和(动态规划)

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com)

#include <initializer_list>
#include <iostream>
#include <vector>
using namespace std;int main() {//输入数据int n,q;cin>>n>>q;vector<int> arr;arr.resize(n+1);for(int i=1;i<n+1;i++){cin>>arr[i];}//构建前缀和vector<long long> dp;dp.resize(n+1);for(int i=1;i<n+1;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;
}
// 64 位输出请用 printf("%lld")

【模板】二维前缀和_牛客题霸_牛客网 (nowcoder.com)

#include <iostream>
#include <vector>
using namespace std;const int N=1001,M=1001;
int arrp[N][M]={0};
long long dp[N][M]={0};
int main(){int n,m,q;cin>>n>>m>>q;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>arrp[i][j];}}//前缀和for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dp[i][j]=dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]+arrp[i][j];}}int x1,y1,x2,y2;while(q--){cin>>x1>>y1>>x2>>y2;cout<<dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]<<endl;}
}

724. 寻找数组的中心下标 - 力扣(LeetCode)

class Solution {
public:int pivotIndex(vector<int>& nums) {const int n=nums.size();int dp1[n+1]; int dp2[n+1];dp1[0]=0;for(int i=1;i<n;i++){dp1[i]=dp1[i-1]+nums[i-1];}dp2[n-1]=0;for(int i=n-2;i>=0;i--){dp2[i]=dp2[i+1]+nums[i+1];}for(int i=0;i<n;i++){if(dp1[i]==dp2[i]){return i;}}return -1;}
};

 238. 除自身以外数组的乘积 - 力扣(LeetCode)

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n=nums.size();vector<int> dp1(n);vector<int> dp2(n);dp1[0]=dp2[n-1]=1;for(int i=1;i<n;i++){dp1[i]=dp1[i-1]*nums[i-1];}for(int i=n-2;i>=0;i--){dp2[i]=dp2[i+1]*nums[i+1];}vector<int> ret(n);for(int i=0;i<n;i++){ret[i]=dp1[i]*dp2[i];}return ret;}
};

560. 和为 K 的子数组 - 力扣(LeetCode)

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash;hash[0]=1;int sum = 0;int ret = 0;for (auto val : nums) {sum += val;if (hash.count(sum - k))ret += hash[sum - k];hash[sum]++;}return ret;}
};

 974. 和可被 K 整除的子数组 - 力扣(LeetCode)

同余定理:(a-b)%k==c………0     =》 a%k==b%k   

暴力枚举:枚举每个以nums[i]结尾的数组,判断其中和为k的累加,最后返回结果

优化:前缀和+同余定理:首先,加以i结尾的子数组和为y,sum是i的前缀和,然后y%k==0表示子数组的和可以被整除。所以(sum-x)%k==0   => 同余定理: sum%k==x%k,其中x可以是i之前所有元素的前缀和,我们用hash统计好i之前所有元素的前缀和,就可以得出以i结尾的子数组和为k的个数。

细节:这里的sum和x可能为负数,所以%k取余可能是负数,所以用 sum%k==x%k,无法正确判断出一些特殊情况,例如sum=-3,x=2;所以修正取余:(sum%k+k)%k,这样所有余数都死正数。

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {int  ret=0;unordered_map<int,int> hash;int n=nums.size();hash[0]=1;int sum=0;for(int i=0;i<n;i++){sum+=nums[i];int r=(sum%k+k)%k;//根据同余定理,判断前缀和除以k所得余数r的个数if(hash.count(r)) ret+=hash[r];hash[r]++;}return ret;}
};

. - 力扣(LeetCode)

class Solution {
public:int findMaxLength(vector<int>& nums) {int ret=-1;int n=nums.size();for(int i=0;i<n;i++){//0转换为-1。if(nums[i]==0)nums[i]=-1;}unordered_map<int,int> hash;//建立前缀和与下标的映射关系//我就是个大傻逼,前缀和都要有一个开始前缀hash[0]=-1;int sum=0;for(int i=0;i<n;i++){sum+=nums[i];if(hash.count(sum)) ret=max(ret,i-hash[sum]) ;//这里是sum-x,x是和为0的连续子数组的和.x=0hash[sum]=i;//建立下标和前缀和的映射}return ret;}
};

. - 力扣(LeetCode)

//************************
class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int m=mat.size(); int n=mat[0].size();vector<vector<int>> answer(m,vector<int>(n,0));vector<vector<int>> dp(m+1,vector<int>(n+1,0));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];}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){//Ⅰ用变量x1,y1存计算的区域,用条件判断太傻逼int x1= i-k>=0?i-k:0; int y1= j-k>=0? j-k:0;int x2= i+k<m? i+k:m-1; int y2= j+k<n ? j+k:n-1;x1++;y1++;x2++;y2++;//Ⅱ因为dp的位置坐标对于mat,+1answer[i][j]=dp[x2][y2]-dp[x2][y1-1]-dp[x1-1][y2]+dp[x1-1][y1-1];//Ⅲ 区间计算x1-1,y1-1}}return answer;}
};

相关文章:

算法笔记—前缀和(动态规划)

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) #include <initializer_list> #include <iostream> #include <vector> using namespace std;int main() {//输入数据int n,q;cin>>n>>q;vector<int> arr;arr.resize(n1);for(int i1;i<…...

将HTML转换为PDF:使用Spire.Doc的详细指南(二)无水印版

目录 引言 一、准备工作 1. 下载Spire.Doc for Java破解版 2. 将JAR包安装到本地Maven (1) 打开命令提示符 (2) 输入安装命令 (3) 在pom.xml中导入依赖 二、实现HTML到PDF的转换 1. 创建Java类 2. 完整代码示例 3. 代码解析 4. 处理图像 5. 性能优化 6. 错误处理…...

V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网

您使用BDZL-V900时&#xff0c;是否遇到过以下这种问题&#xff1f; 去现场配置WIFI发现没带电脑&#xff0c;无法联网❌ 首次配置WIFI时需使用网线连电脑&#xff0c;不够快捷❌ 而博达智联为解决该类问题&#xff0c;专研了一款网关配网工具&#xff0c;实现用户现场使用手机…...

prober.php探针

raw.githubusercontent.com/kmvan/x-prober/master/dist/prober.php...

esp8266_TFTST7735语音识别UI界面虚拟小助手

文章目录 一 实现思路1 项目简介1.1 项目效果1.2 实现方式 2 项目构成2.1 软硬件环境2.2 完整流程总结&#xff08;重点整合&#xff09;(1) 功能逻辑图(2) 接线(3) 使用esp8266控制TFT屏(4)TFT_espI库配置方法(5) TFT_esp库常用代码详解(6)TFT屏显示图片(7) TFT屏显示汉字(8) …...

【CSS in Depth 2 精译_086】14.3:CSS 剪切路径(clip-path)的用法

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 14.1.1 滤镜的类型14.1.2 背景滤镜 14.2 蒙版 14.2.1 带渐变效果的蒙版特效14.2.2 基于亮度来定义蒙版14.2.3 其他蒙版属…...

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO&#xff08;Plain Old Java Objects&#xff0c;普通老式 …...

vue 文本域 展示的内容格式要和填写时保持一致

文本域 展示的内容格式要和填写时保持一致 <el-inputtype"textarea":rows"5"placeholder"请输入内容"v-model"formCredit.point"style"width:1010px;" > </el-input> 样式加个&#xff1a; white-space: pre-w…...

linux-----进程及基本操作

进程的基本概念 定义&#xff1a;在Linux系统中&#xff0c;进程是正在执行的一个程序实例&#xff0c;它是资源分配和调度的基本单位。每个进程都有自己独立的地址空间、数据段、代码段、栈以及一组系统资源&#xff08;如文件描述符、内存等&#xff09;。进程的组成部分&am…...

[Python学习日记-73] 面向对象实战1——答题系统

[Python学习日记-73] 面向对象实战1——答题系统 简介 需求模型——5w1h8c 领域模型 设计模型 实现模型 案例&#xff1a;年会答题系统 简介 在学习完面向对象之后你会发现&#xff0c;你还是不会自己做软件做系统&#xff0c;这是非常正常的&#xff0c;这是因为计算机软…...

Win10将WindowsTerminal设置默认终端并添加到右键(无法使用微软商店)

由于公司内网限制&#xff0c;无法通过微软商店安装 Windows Terminal&#xff0c;本指南提供手动安装和配置新版 Windows Terminal 的步骤&#xff0c;并添加右键菜单快捷方式。 1. 下载新版终端安装包: 访问 Windows Terminal 的 GitHub 发布页面&#xff1a;https://githu…...

AOI外观缺陷检测机

主要功能&#xff1a; 快速检测产品装配缺陷&#xff0c;包括螺丝、元器件、端子排线、二维码、一维条码、识别读码、产品外观 Logo缺陷以及产品标签、字符缺陷检测等产品的缺陷检测。 设备优势&#xff1a;1.采用轻型可移动支架&#xff0c;可以快速对接产线工艺工序&am…...

精读 84页华为BLM战略规划方法论

这篇文档主要介绍了华为的BLM战略规划方法论&#xff0c;该方法论旨在帮助企业制定战略规划&#xff0c;并确保战略规划的可执行性和有效性。以下是该文档的核心知识点和重点需要关注的内容&#xff1a; 战略规划的定义&#xff1a;战略规划是企业依据企业外部环境和企业自身的…...

工业摄像机基于电荷耦合器件的相机

工业摄像机系列产品及其识别技术的详细介绍&#xff1a; 一、工业摄像机概述 工业摄像机是利用光学成像技术获取视觉信息&#xff0c;并通过图像处理算法分析这些信息的设备。它通常具有高图像稳定性、高传输能力和高抗干扰能力等特性&#xff0c;适用于各种复杂的工业环境。 …...

13.罗意文面试

1、工程化与架构设计&#xff08;考察项目管理和架构能力&#xff09; 1.1 你负责的可视化编排项目中&#xff0c;如何设计组件的数据结构来支持"拖拉拽"功能&#xff1f;如何处理组件间的联动关系&#xff1f; // 组件数据结构示例 {components: [{id: comp1,type…...

xxljob window免安装

gitee地址&#xff1a; https://gitee.com/xuxueli0323/xxl-job idea打开 1、配置maven环境 2、修改数据库连接&#xff0c;网页端口 3、修改执行器中连接的网页端口 右侧-xxljob-生命周期-package 生成&#xff1a; D:\xxx\Gitee\xxl-job\xxl-job-admin\target 目录下 x…...

MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证

功能Oracle语法MariaDB语法Oracle执行结果MariaDB执行结果创建存储过程未使用参数和变量CREATE PROCEDURE p1 ASBEGINNULL;END p1;/ DELIMITER // CREATE PROCEDURE p1()ISBEGINNULL;END // DELIMITER ; 带有参数和变量CREATE PROCEDURE p1(p_input IN NUMBER, p_output OUT NU…...

【AI驱动的数据结构:包装类的艺术与科学】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object&#xff0c;为了…...

初学stm32 --- PWM输出

目录 STM32 PWM工作过程​编辑 STM32 PWM工作过程&#xff08;通道1为例&#xff09; PWM模式1 & PWM模式2 向上计数配置说明​编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 ​编辑 PWM输出相关库函数 输出比较初始化函数&#xff1a; 设置比较值函数&a…...

ES6学习Iterator遍历器(七)

这里写目录标题 一、概念1.1、遍历器1.2、作用1.3、遍历过程 二、代码学习 一、概念 JavaScript 原有的表示“集合”的数据结构&#xff0c;主要是数组&#xff08; Array &#xff09;和对象&#xff08; Object &#xff09;&#xff0c;ES6 又添加了 Map 和Set 。这样就有了…...

双轨制新零售系统模式开发解析

双轨制新零售系统模式开发解析&#xff1a;从架构设计到合规落地在新零售数字化转型浪潮中&#xff0c;双轨制模式凭借其轻量化组织架构与高效裂变能力&#xff0c;成为企业低成本获客与业绩增长的重要工具。不同于传统多级分销的复杂层级&#xff0c;双轨制通过“二二复制”的…...

用Lumerical MODE的EME Solver设计硅基波导耦合器:一个完整案例解析

硅基光子集成中的EME Solver实战&#xff1a;定向耦合器设计与性能优化全解析 光子集成电路(PIC)设计领域&#xff0c;模式展开法(EME)因其在长距离波导结构仿真中的独特优势&#xff0c;正成为工程师验证器件性能的首选工具。尤其在硅基定向耦合器这类关键无源器件的设计中&am…...

Torch-Pruning支持神经辐射场(NERF):3D重建模型压缩终极指南

Torch-Pruning支持神经辐射场(NERF)&#xff1a;3D重建模型压缩终极指南 【免费下载链接】Torch-Pruning [CVPR 2023] Towards Any Structural Pruning; LLMs / Diffusion / Transformers / YOLOv8 / CNNs 项目地址: https://gitcode.com/gh_mirrors/to/Torch-Pruning 神…...

探索TinyEditor:400字节内的微型全能代码编辑器

探索TinyEditor&#xff1a;400字节内的微型全能代码编辑器 【免费下载链接】TinyEditor A functional HTML/CSS/JS editor in less than 400 bytes 项目地址: https://gitcode.com/gh_mirrors/ti/TinyEditor 在前端开发工具领域&#xff0c;TinyEditor以其极致精简的设…...

FlowState Lab跨周期波动模式提取效果:从秒级到年度的规律发现

FlowState Lab跨周期波动模式提取效果&#xff1a;从秒级到年度的规律发现 1. 时间序列分析的革命性突破 时间序列分析领域最近迎来了一项重要突破。传统方法往往只能聚焦单一时间尺度&#xff0c;要么分析高频交易数据&#xff0c;要么研究季节性规律&#xff0c;很难同时捕…...

Kubernetes 与 GitOps 最佳实践

Kubernetes 与 GitOps 最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。GitOps 是现代 Kubernetes 运维的重要趋势&#xff0c;今天直接上硬货&#xff0c;教你如何在 Kubernetes 中实现 GitOps 工作流。 二、GitOps 核心概念 概念描述优势声明式配置所有配置以声明式方…...

我的LVDS信号有振铃?可能是端接电阻没选对!从仿真到实测的端接方案选择指南

LVDS信号振铃问题全解析&#xff1a;从端接电阻选择到实测验证 振铃现象是LVDS信号传输中最令人头疼的问题之一。当你在示波器上看到信号边沿出现振荡波形时&#xff0c;第一反应可能是怀疑PCB布局或信号源质量。但经验丰富的工程师都知道&#xff0c;80%的振铃问题根源在于端接…...

如何快速配置安卓虚拟摄像头VCAM:专业使用技巧完整指南

如何快速配置安卓虚拟摄像头VCAM&#xff1a;专业使用技巧完整指南 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam 安卓虚拟摄像头VCAM是一款基于Xposed框架的创新工具&#xff0c;能够将…...

从BiomixQA到黄帝内经:聊聊2024年那些‘小而美’的垂直医学问答数据集

2024医学垂直问答数据集全景&#xff1a;从BiomixQA到黄帝内经的实战选型指南 当ChatGPT在通用领域大放异彩时&#xff0c;医学AI的战场正悄然转向那些"小而美"的垂直数据集。不同于通用语料的粗放式训练&#xff0c;专业医学问答需要精确到细胞级的语义理解——一个…...

老旧设备AI赋能:开源方案实现群晖NAS人脸识别功能升级

老旧设备AI赋能&#xff1a;开源方案实现群晖NAS人脸识别功能升级 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 在数字化时代&#xff0c;NAS设备已…...