当前位置: 首页 > 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 。这样就有了…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...