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

算法工具箱之前缀和

前缀和概念前缀和Prefix Sum是一种重要的预处理技术能够在O(1)时间内快速计算数组任意区间的和。核心思想对于数组nums我们预先计算一个前缀和数组prefix其中prefix[i]表示nums[0]到nums[i]的和一维前缀和#includeiostream #includevector using namespace std; int main() { long long n,m; cinnm; vectorlong long arr1(n); vectorlong long arr2(n 1); arr2[0] 0; for(auto x : arr1) { scanf(%d,x); } for(int j 1;j arr2.size();j) { arr2[j] arr2[j-1] arr1[j-1]; } long long l,r; for(int i 0;i m;i) { cinlr; coutarr2[r] - arr2[l - 1]endl; } return 0; }算法思路先构建一个比原数组长度1的前缀和数组再将arr2[0] 0然后⽤ arr2[i] 表⽰ [1, i] 区间内所有元素的和那么 arr2[i - 1] ⾥⾯存的就是 i - 1 区间内所有元素的和那么可得递推公式arr2[i] arr2[i - 1] arr1[i]。使⽤前缀和数组「快速」求出「某⼀个区间内」所有元素的和当询问的区间是[l, r] 时区间内所有元素的和为arr2[r] - arr2[l - 1]。算法优势1查询高效将O(n)的区间求和优化为O(1)的差值计算2预处理思想一次构建多次使用3扩展性强可扩展到二维、多维情况二位前缀和#includeiostream #includevector using namespace std; int main() { int m, n, q; cin m n q; vectorvectorint arr(m, vectorint(n)); vectorvectorlong long arr2(m 1, vectorlong long(n 1)); for (int i 0; i m; i) { for (int j 0; j n; j) { cin arr[i][j]; } } vectorvectorint arr1(q, vectorint(4)); for (int x 0; x q; x) { for (int i 0; i 4; i) { cin arr1[x][i]; } } for (int i 1; i m; i) { for (int j 1; j n; j) { arr2[i][j] arr2[i - 1][j] arr2[i][j - 1] arr[i - 1][j - 1] - arr2[i - 1][j - 1]; } } for (int i 0; i q; i) { int x1 arr1[i][0], y1 arr1[i][1], x2 arr1[i][2], y2 arr1[i][3]; cout arr2[x2][y2] - arr2[x1 - 1][y2] - arr2[x2][y1 - 1] arr2[x1 - 1][y1 - 1] endl; } return 0; }算法思路类⽐于⼀维数组的形式如果我们能处理出来从 元素的累加和就可以在 [0, 0] 位置到 [i, j] 位置这⽚区域内所有 O(1) 的时间内搞定矩阵内任意区域内所有元素的累加和。1搞出来前缀和矩阵这⾥就要⽤到⼀维数组⾥⾯的拓展知识我们要在矩阵的最上⾯和最左边添加上⼀⾏和⼀列 0这样我们就可以省去⾮常多的边界条件的处理。我们填写前缀和矩阵数组的时候下标直接从 1 开始能⼤胆使⽤ i - 1 , j - 1 位 置的值。递归方程就是s[i][j]s[i−1][j]s[i][j−1]−s[i−1][j−1]a[i][j]黄 新格子a[i][j]红蓝s[i-1][j]上一行到 j 列的和红绿s[i][j-1]这一行到 j-1 列的和红s[i-1][j-1]上一行 j-1 列的和所以红蓝红绿红蓝绿红红多算了一次因此s[i][j](红蓝)(红绿)−红黄。2查询公式求子矩阵和查询(x1,y1)到(x2,y2)的和sums[x2][y2]−s[x1−1][y2]−s[x2][y1−1]s[x1−1][y1−1]用颜色划分理解把整个大矩形s[x2][y2]分成四个区域D 我们要查询的子矩阵(x1,y1)到(x2,y2)ABCDs[x2][y2]ABs[x1-1][y2],ACs[x2][y1-1],As[x1-1][y1-1]。所以D(ABCD)−(AB)−(AC)A即Ds[x2][y2]−s[x1−1][y2]−s[x2][y1−1]s[x1−1][y1−1]。后缀和概念从一个元素开始到数组末尾的所有元素之和。具体来说给定一个数组nums它的后缀和数组suffixSum是另一个数组其中每个元素suffixSum[i]的定义如下suffixSum[i] nums[i] nums[i1] ... nums[n-1]。这里n是数组nums的长度。计算后缀和的步骤从后往前遍历。与前缀和思想类似例题class Solution { public: int pivotIndex(vectorint nums) { int ret -1; vectorint arr1(nums.size(), 0); vectorint arr2(nums.size(), 0); int x arr1.size() - 1; for (int i 1; i nums.size(); i) { arr1[i] arr1[i - 1] nums[i - 1]; } for (int i x-1; i 0; i--) { arr2[i] arr2[i1] nums[i 1]; } for (int i 0; i nums.size(); i) { if (arr1[i] arr2[i]) { return i; } } return ret; } };核心思路我们要寻找一个下标i使得左侧和 右侧和所以我们发现只要前缀和和后缀和相等那么这个中心下标就是这个i。

相关文章:

算法工具箱之前缀和

前缀和概念:前缀和(Prefix Sum)是一种重要的预处理技术,能够在O(1)时间内快速计算数组任意区间的和。核心思想:对于数组nums,我们预先计算一个前缀和数组prefix,其中:prefix[i]表示n…...

OpenAlternative移动端优化完全指南:打造完美开源软件目录响应式体验

OpenAlternative移动端优化完全指南:打造完美开源软件目录响应式体验 【免费下载链接】openalternative Curated list of open source alternatives to proprietary software. 项目地址: https://gitcode.com/gh_mirrors/op/openalternative 在移动设备使用率…...

Chrono 自然语言日期解析器:从文本到标准日期的完整指南

Chrono 自然语言日期解析器:从文本到标准日期的完整指南 【免费下载链接】chrono A natural language date parser in Javascript 项目地址: https://gitcode.com/gh_mirrors/ch/chrono Chrono 是一款强大的 JavaScript 自然语言日期解析器,能够将…...

浏览器神器Tampermonkey:手把手教你安装和使用4款必备油猴脚本

Tampermonkey进阶指南:解锁浏览器潜能的4个实战脚本方案 每次遇到网页限制复制、强制登录、内容折叠这些烦人的设计时,我都习惯性地点开浏览器右上角那个猴子图标。作为从业十年的前端开发者,我可以负责任地说:Tampermonkey是浏览…...

为什么才聚是PMP快速通关的“实战派摇篮”?

在中国项目管理领域,有一个名字陪伴了行业整整27年——才聚。从1999年PMP认证刚刚引入中国开始,才聚就组织了国内第一、第二期PMP培训,至今已服务超过10万名PMP考生,相当于全国每5名PMP考生中就有2名接受过才聚的服务。本文将深入…...

如何用双路PWM实现16bit DAC输出?MCU音频信号处理实战

如何用双路PWM实现16bit DAC输出?MCU音频信号处理实战 在嵌入式音频开发中,高精度DAC输出往往是提升音质的关键。但当你手头的MCU主频有限,内置DAC分辨率不足时,如何突破硬件限制?本文将带你深入双路PWM分频叠加技术的…...

OpenClaw+千问3.5-9B学习助手:自动整理笔记与生成习题

OpenClaw千问3.5-9B学习助手:自动整理笔记与生成习题 1. 为什么需要AI学习助手? 去年备考PMP证书时,我每天要处理上百页PDF讲义。最痛苦的莫过于手动整理重点和制作复习卡片——复制粘贴到半夜,第二天发现漏了关键图表&#xff…...

01-17-01 API Level与版本管理机制

01-17-01 API Level与版本管理机制 什么是API Level API Level是Android系统的版本号,每个Android版本都有唯一的API Level。 源码定义 // Build.java public class Build {public static class VERSION {/*** 设备的Android版本*/public static final int SDK_INT …...

终极write-good CLI指南:10个快速提升英语写作质量的命令行技巧

终极write-good CLI指南:10个快速提升英语写作质量的命令行技巧 【免费下载链接】write-good Naive linter for English prose 项目地址: https://gitcode.com/gh_mirrors/wr/write-good write-good是一款专为开发者打造的英语写作质量检查工具,它…...

如何优雅管理JetBrains IDE试用期?3种场景下的完美解决方案

如何优雅管理JetBrains IDE试用期?3种场景下的完美解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经因为JetBrains IDE试用期结束而不得不中断开发工作?当代码写到关键部…...

OpenClaw安全方案:Phi-3-vision本地处理敏感图文数据实践

OpenClaw安全方案:Phi-3-vision本地处理敏感图文数据实践 1. 为什么需要本地化处理敏感数据 去年我参与了一个医疗数据整理项目,团队需要从数千份病历扫描件中提取关键指标。最初尝试使用某知名云服务商的OCR文本分析API,却在法务审核阶段被…...

Sequel批量插入性能终极指南:如何快速处理百万级数据

Sequel批量插入性能终极指南:如何快速处理百万级数据 【免费下载链接】sequel Sequel: The Database Toolkit for Ruby 项目地址: https://gitcode.com/gh_mirrors/seq/sequel Sequel作为Ruby的强大数据库工具包,提供了高效处理数据的能力&#x…...

Tessent ATPG实战避坑:从Stuck-at到Transition Delay测试,我的向量生成与验证全流程

Tessent ATPG实战避坑指南:从Stuck-at到Transition Delay测试的完整流程解析 1. 芯片测试工程师的日常挑战 作为一名从业多年的芯片测试工程师,我深知ATPG(自动测试向量生成)工具在实际项目中的应用绝非一帆风顺。每当拿到一个新的…...

4G5G专题-85: 架构 - 5G NR空中接口与协议栈演进

1. 5G NR空中接口设计原理 5G NR(New Radio)空中接口是5G网络的核心技术之一,它直接决定了无线信号的传输效率和质量。与4G LTE相比,5G NR在设计上做了许多突破性的改进,尤其是在低延迟和高带宽场景下表现尤为突出。 1…...

vuejs-datepicker高亮日期完全指南:打造智能日历体验

vuejs-datepicker高亮日期完全指南:打造智能日历体验 【免费下载链接】vuejs-datepicker A simple Vue.js datepicker component. Supports disabling of dates, inline mode, translations 项目地址: https://gitcode.com/gh_mirrors/vu/vuejs-datepicker v…...

PHP5.2下chunk_split()函数整数溢出漏洞 分析

受影响系统&#xff1a; PHP PHP < 5.2.3 不受影响系统&#xff1a; PHP PHP 5.2.3 描述&#xff1a; -------------------------------------------------------------------------------- BUGTRAQ ID: 24261 CVE(CAN) ID: CVE-2007-2872PHP是一种流行的WEB服务器端编程语言…...

OpenClaw隐私保护:Qwen3.5-9B本地处理敏感数据的实践

OpenClaw隐私保护&#xff1a;Qwen3.5-9B本地处理敏感数据的实践 1. 为什么需要本地化处理敏感数据&#xff1f; 去年我在处理一批客户调研报告时&#xff0c;曾遇到一个尴尬场景&#xff1a;当我把包含联系方式和消费习惯的Excel表格上传到某云端AI分析平台后&#xff0c;突…...

论文阅读:arxiv 2026 From Assistant to Double Agent: Formalizing and Benchmarking Attacks on OpenClaw for

总目录 大模型安全研究论文整理 2026年版&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/159047894 From Assistant to Double Agent: Formalizing and Benchmarking Attacks on OpenClaw for Personalized Local AI Agent https://arxiv.org/abs/2602.08412 该…...

深入理解xcode-install的实现原理:Ruby CLI工具开发最佳实践

深入理解xcode-install的实现原理&#xff1a;Ruby CLI工具开发最佳实践 【免费下载链接】xcode-install &#x1f53d; Install and update your Xcodes 项目地址: https://gitcode.com/gh_mirrors/xc/xcode-install xcode-install是一款高效的Ruby CLI工具&#xff0c…...

OpenClaw多通道接入:Qwen3-4B同时服务飞书与钉钉机器人

OpenClaw多通道接入&#xff1a;Qwen3-4B同时服务飞书与钉钉机器人 1. 为什么需要多通道接入&#xff1f; 上周我遇到一个尴尬场景&#xff1a;团队部分成员用飞书沟通&#xff0c;另一些用钉钉。当我尝试用OpenClaw搭建自动化助手时&#xff0c;发现默认配置只能对接单一平台…...

论文阅读:arxiv 2026 Uncovering Security Threats and Architecting Defenses in Autonomous Agents: A Case S

总目录 大模型安全研究论文整理 2026年版&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/159047894 Uncovering Security Threats and Architecting Defenses in Autonomous Agents: A Case Study of OpenClaw https://arxiv.org/abs/2603.12644 该论文《Uncov…...

ZString与System.Text.Json集成:零分配JSON序列化的终极方案

ZString与System.Text.Json集成&#xff1a;零分配JSON序列化的终极方案 【免费下载链接】ZString Zero Allocation StringBuilder for .NET and Unity. 项目地址: https://gitcode.com/gh_mirrors/zs/ZString ZString是.NET和Unity平台的零分配高性能字符串构建库&…...

Mongoose OS项目部署清单:从开发到生产的完整流程

Mongoose OS项目部署清单&#xff1a;从开发到生产的完整流程 【免费下载链接】mongoose-os Mongoose OS - an IoT Firmware Development Framework. Supported microcontrollers: ESP32, ESP8266, CC3220, CC3200, STM32F4, STM32L4, STM32F7. Amazon AWS IoT, Microsoft Azur…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作范围最小化实践

OpenClaw权限管理&#xff1a;千问3.5-35B-A3B-FP8操作范围最小化实践 1. 为什么需要限制OpenClaw的权限 去年夏天&#xff0c;我在本地部署OpenClaw对接千问3.5模型时&#xff0c;曾因为一个简单的文件整理指令差点酿成大祸。当时我让AI帮我整理下载文件夹&#xff0c;结果它…...

打造 AI 冒险团:HagiCode 多 Agent 协作配置实战派

MySQL 中的 count 三兄弟&#xff1a;效率大比拼&#xff01; 一、快速结论&#xff08;先看结论再看分析&#xff09; 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的&#xff01;我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄弟…...

NBIO Websocket支持:通过Autobahn测试套件的完整指南

NBIO Websocket支持&#xff1a;通过Autobahn测试套件的完整指南 【免费下载链接】nbio Pure Go 1000k connections solution, support tls/http1.x/websocket and basically compatible with net/http, with high-performance and low memory cost, non-blocking, event-drive…...

嵌入式飞控信号滤波:SMA/EMA/互补滤波与卡尔曼简化实现

1. NexgenFilter 库概述&#xff1a;面向嵌入式飞行控制的轻量级信号处理工具集NexgenFilter 是专为 Nexgen Magpie 无人机飞控系统设计的一套高性能、低开销数字滤波与噪声生成库。它并非通用 DSP 库&#xff0c;而是深度嵌入在实时性严苛、资源受限的 MCU&#xff08;如 STM3…...

如何用readme.so快速制作专业README:揭秘实时预览与Markdown同步技术

如何用readme.so快速制作专业README&#xff1a;揭秘实时预览与Markdown同步技术 【免费下载链接】readme.so An online drag-and-drop editor to easily build READMEs 项目地址: https://gitcode.com/gh_mirrors/re/readme.so readme.so是一款功能强大的在线拖放编辑器…...

React Express渲染模式终极指南:Render Props与自定义Hook的对比分析

React Express渲染模式终极指南&#xff1a;Render Props与自定义Hook的对比分析 【免费下载链接】react-express Learn React through interactive examples 项目地址: https://gitcode.com/gh_mirrors/re/react-express 想要在React中实现组件逻辑复用&#xff1f;Ren…...

Go 限流器性能优化终极指南:避免缓存伪共享的 padding 策略

Go 限流器性能优化终极指南&#xff1a;避免缓存伪共享的 padding 策略 【免费下载链接】ratelimit A Go blocking leaky-bucket rate limit implementation 项目地址: https://gitcode.com/gh_mirrors/ra/ratelimit 在 Go 高性能限流器开发中&#xff0c;go.uber.org/r…...