发布时间:2026/6/16 4:23:17
算法设计与分析(十三)
Count of Range Sum更多技术博客 http://vilins.top/题目Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j (i ≤ j), inclusive.Note:A naive algorithm of O(n2) is trivial. You MUST do better than that.Example:Input: nums [-2,5,-1], lower -2, upper 2,Output: 3Explanation: The three ranges are : [0,0], [2,2], [0,2] and their respective sums are: -2, -1, 2.分析题目的意思是给出一个数组和一个上界和下界要求在连续的区间范围求和使得和在给出的下界和上界的范围内要求给出满足条件的区间的个数。首先分析这个问题这里涉及到区间求和对于这类题目一般的套路是算一个O(n)复杂度的连续求和自然题目也说到通过一般的方法可以在O(n*n)的复杂度求出来但这样显然会超时。这里我们采用分治算法来算首先我们理解以下基本事实对于两个有序的数组我们假设其为n1和n2那么对于n1的一个数如果我们在n2找到最后下标i1使得n2[i1]n1[i]并且有最后下标i2使得n2[i2]n1[i]那么在n2中比n1[i]大的个数为i2-i1。这里我们采用分治算法用到上述思想我们不断将整个数组划分成小的问题在最后一个只有两个元素时开始返回计算对左边数组的每一个元素我们利用上述的思想每处理完一个子问题的时候对其进行归并排序的合并使得问题的左右两边总是有序的这样一来不断往上返回最后得到结果。注意一个问题就是左右两边总是有序的并且我们注意到左边数组的下标总是小于右边数组的下标那么得到的范围也必定是从小下标到大的下标。源码class Solution { public: void mergeSort(vectorlong sum, int b, int m, int e) { int n1 m - b ; int n2 e - m ; vectorlong left(n1, 0); vectorlong right(n2, 0); for(int i 0; i n1; i) { left[i] sum[b i]; } for(int i 0; i n2; i) { right[i] sum[m i]; } int i 0, j 0; for(int k b; k e; k) { if((left[i] right[j])) { sum[k] right[j]; j; if(j n2) { for(int q i; q n1; q) { sum[k1q-i] left[q]; } break; } } else { //cout k k endl; sum[k] left[i]; i; if(i n1) { for(int q j; q n2; q) { sum[k1q-j] right[q]; } break; } } } } int merge(vectorlong sum, int lower, int upper, int low_index, int high_index) { if(high_index - low_index 1) { return 0; } int mid (low_index high_index)/2; int m mid, n mid, count 0; count merge(sum, lower, upper, low_index, mid) merge(sum, lower, upper, mid, high_index); for(int i low_index; i mid; i) { while((sum[m] - sum[i] lower)m high_index) { m; } while((sum[n] - sum[i] upper)n high_index) { n; } count (n - m); } mergeSort(sum, low_index, mid, high_index); //inplace_merge(sum.begin()low_index, sum.begin()mid, sum.begin()high_index); return count; } int countRangeSum(vectorint nums, int lower, int upper) { vectorlong sum(nums.size()1, 0); for(int i 0; i nums.size(); i) { sum[i1] sum[i] nums[i]; } return merge(sum, lower, upper, 0, nums.size()1); } };复杂度分析算法复杂度分析我们这里是基于递归实现的排序的时间复杂度为O(n)在求解的时候递归求解复杂度为logn加上排序的开销总的复杂度应该就是O(nlogn)而空间复杂度是用在对数组进行依次求和的存储复杂度为O(n)。在对左右两个数组合并我用自己实现的函数时效果会差一些而用c标准库的函数的时候也就是用inplace_merge这个函数计算起来会快一点点可能是某些细节的优化问题。更多技术博客 http://vilins.top/

相关新闻

动作延迟<12ms、关节误差<0.8°——Sora 2动捕模拟工业级SLA标准首次披露
2026/6/13 14:27:13

动作延迟<12ms、关节误差<0.8°——Sora 2动捕模拟工业级SLA标准首次披露

更多请点击: https://kaifayun.com 第一章:动作延迟<12ms、关节误差<0.8——Sora 2动捕模拟工业级SLA标准首次披露 实时性与精度的双重突破 Sora 2在动作捕捉模拟中首次公开达成工业级空间定位精度(SLA)标…

阅读更多
Android Stdio8.0往模拟器文件系统加文件时Permission denied
2026/6/10 1:17:00

Android Stdio8.0往模拟器文件系统加文件时Permission denied

Android Stdio8.0访问AVD文件系统 更多技术博客 http://vilins.top/ 点击右下角 右键upload发现权限不够 打开ADK路径 找到adb 给权限 在window系统下通过长按拖动adb.exe执行命令,否则发现找不到adb命令。 如 adb.exe root更多技术博客 http://vilins.top/

阅读更多
告别Clion和GCC:在VS2022上用MSVC编译器搞定你的第一个C语言图像处理项目
2026/6/5 23:33:14

告别Clion和GCC:在VS2022上用MSVC编译器搞定你的第一个C语言图像处理项目

在VS2022中用MSVC构建C语言图像处理项目的完整指南对于习惯Linux开发环境的程序员来说,第一次在Windows平台上使用Visual Studio和MSVC编译器进行C语言开发可能会遇到不少挑战。本文将带你从零开始,在VS2022中配置MSVC编译器,完成一个基础的B…

阅读更多
PSIVG框架:物理模拟器与扩散模型融合的视频生成技术
2026/6/16 3:57:59

PSIVG框架:物理模拟器与扩散模型融合的视频生成技术

1. 物理模拟器与视频生成的融合背景 在计算机视觉和图形学领域,视频生成技术近年来取得了显著进展。扩散模型(Diffusion Models)作为当前最先进的生成方法,已经能够产生具有高度视觉真实感的视频内容。然而,这些模型在…

阅读更多
深度解析:defender-control如何实现Windows Defender完全控制的技术架构
2026/6/16 3:57:59

深度解析:defender-control如何实现Windows Defender完全控制的技术架构

深度解析:defender-control如何实现Windows Defender完全控制的技术架构 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defend…

阅读更多
网盘直链下载助手LinkSwift:九大平台文件下载加速解决方案
2026/6/16 3:57:59

网盘直链下载助手LinkSwift:九大平台文件下载加速解决方案

网盘直链下载助手LinkSwift:九大平台文件下载加速解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

阅读更多
S-VoCAL:文学角色语音属性推断的技术突破与应用
2026/6/16 3:57:59

S-VoCAL:文学角色语音属性推断的技术突破与应用

1. 文学角色语音属性推断的技术挑战与S-VoCAL解决方案 在语音合成技术(TTS)快速发展的今天,合成有声书正经历前所未有的变革。最新数据显示,全球有声书市场规模预计2025年将增长20%,这背后离不开TTS技术在自然度和表现…

阅读更多
魔兽争霸3终极增强指南:WarcraftHelper插件让你的游戏体验焕然一新
2026/6/16 3:57:59

魔兽争霸3终极增强指南:WarcraftHelper插件让你的游戏体验焕然一新

魔兽争霸3终极增强指南:WarcraftHelper插件让你的游戏体验焕然一新 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代…

阅读更多
HTTrack网站镜像工具:构建本地化Web内容库的完整解决方案
2026/6/16 2:57:59

HTTrack网站镜像工具:构建本地化Web内容库的完整解决方案

HTTrack网站镜像工具:构建本地化Web内容库的完整解决方案 【免费下载链接】httrack HTTrack Website Copier, copy websites to your computer (Official repository) 项目地址: https://gitcode.com/gh_mirrors/ht/httrack 在当今数字化时代,网站…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/16 0:39:53

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)
2026/6/16 0:57:58

2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)

(先给结论,节省时间) 只想最快把简历“拉到及格线更贴JD”:优先从 鹅来面 开始——先做简历评分与岗位匹配度,再按建议改一版可投递稿。投递量很大、需要职位管理:偏向 Teal(职位追踪 多份简历…

阅读更多
Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)
2026/6/16 0:57:58

Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法
2026/6/16 0:57:58

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memre…

阅读更多
GIT修改用户名
2026/6/14 11:53:59

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/15 2:21:34

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/15 21:13:35

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多