【算法文章10| 前缀和:力扣2055题:蜡烛之间的盘子】

【算法文章10| 前缀和:力扣2055题:蜡烛之间的盘子】

题目链接:2055:蜡烛之间的盘子

这道题是力扣的一道1818分的题,大概题意是这样的:

  • 给你一个字符串,字符串里面只有两种符号:字符 '*''|' ,其中 '*' 表示 盘子'|' 表示 蜡烛
  • 然后给你一个二维的查询数组queries,对于每一个查询 queries[i] = [lefti, righti],找到 子字符串中两支蜡烛之间 的盘子的 数目
  • 返回一个整数数组 answer ,其中 answer[i] 是第 i 个查询的答案。

总结一句话:找规定区间内, 在两支蜡烛之间的盘子的数目

这道题的难点在于,对于每一个查询区间[lefti, righti],怎么找区间内的离边界最近的蜡烛的位置,也就是怎么寻找“有效边界”

思路:寻找“有效边界”

  1. 定义前缀和sum[],记录盘子的数量
  2. 定义两个数组left[] 跟 right[],他们的含义如下:
    1. left[]表示:索引i左侧(含 i)最近的 ‘|’ (蜡烛) 的索引
    2. right[]表示:索引 i 右侧(含 i)最近的 ‘|’ (蜡烛) 的索引
  3. 枚举所有的查询
    • 缩小区间范围
      • 找左端点右边的第一根蜡烛,作为新的左端点
      • 找右端点左边的第一根蜡烛,作为新的右端点

代码

classSolution{publicint[]platesBetweenCandles(String s,int[][] queries){int n = s.length();//1.前缀和sum[]记录盘子的数量int[] sum =newint[n+1];//2.left[]统计索引i(含 i)左侧最近的'|'的索引int[]left =newint[n];int lastCandle =-1;for(int i =0; i < n; i++){if(s.charAt(i)=='|'){ sum[i+1]= sum[i]; lastCandle = i;}else{ sum[i+1]= sum[i]+1;} left[i]= lastCandle;}//3.right[]统计索引i(含 i)右侧最近的'|'的索引int[]right =newint[n]; lastCandle =-1;for(int i = n-1; i >=0; i--){if(s.charAt(i)=='|'){ lastCandle = i;} right[i]= lastCandle;}int[]ans =newint[queries.length];for(int i =0; i < queries.length; i++){//找左端点右边的第一根蜡烛,作为新的左端点int l = right[queries[i][0]];//找右端点左边的第一根蜡烛,作为新的右端点int r = left[queries[i][1]];//更新答案if(l !=-1&& r !=-1&& l < r){ ans[i]= sum[r]- sum[l];}else{ ans[i]=0;}}return ans;}}


一定要理解这两句代码,这两句代码非常关键,我们的目的是:left 向右移,找到区间内的第一根蜡烛。将 right 向左移,找到区间内的最后一根蜡烛。
  • 时间复杂度: O ( n + q ) O(n + q) O(n+q)
    • 遍历字符串计算前缀和 sum 和 left 数组:O(n)
    • 遍历字符串计算 right 数组:O(n)
    • 遍历查询数组 queries:O(q)(q = queries.length)

利用具体案例帮助理解代码

场景一:区间内完全没有蜡烛

假设字符串 s = "***|***",长度为 7。查询区间为 [0, 2](即前三个星号 ***)。

  1. 预处理的结果
    • right 数组:每一个位置向右看的第一根蜡烛都在索引 3。所以 right[0] = 3
    • left 数组:前三个位置向左看都没有蜡烛。所以 left[0, 1, 2] = -1
  2. 判断
    • if (l != -1 && r != -1 && l < r)
    • 这里 r 是 -1,条件直接不成立。
    • 结果ans[i] = 0
场景二:只有一根蜡烛,或蜡烛在边缘无法包裹盘子

假设字符串 s = "***|**",查询区间为 [0, 5](整个字符串)。

  1. 预处理结果
    • right[0]:从索引 0 开始向右找,第一根蜡烛在索引 3。所以 l = 3
    • left[5]:从索引 5 开始向左找,第一根蜡烛也在索引 3。所以 r = 3
  2. 判断逻辑
    • if (l < r) → \rightarrow → 即 if (3 < 3)
    • 条件不成立(因为只有一根蜡烛,无法形成“中间”区域)。
    • 结论ans[i] = 0
场景三:区间内有蜡烛,但它们中间没盘子

假设字符串 s = "**||**",查询区间为 [0, 5]

  1. 预处理结果
    • l = right[0] → \rightarrow → 索引 2(第一根 |)。
    • r = left[5] → \rightarrow → 索引 3(第二根 |)。
  2. 前缀和计算
    • sum[2](前 2 个字符里的盘子数)是 2。
    • sum[3](前 3 个字符里的盘子数)也是 2(因为索引 2 是蜡烛,盘子数没增加)。
  3. 判断
    • l < r (2 < 3) 成立。
    • ans[i] = sum[3] - sum[2] → \rightarrow →0

如果对你有帮助,欢迎点赞、关注、收藏!

Read more

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

放弃无效编码!AI+SDD 重构复杂业务研发范式,新手也能落地

在当前复杂业务系统研发中,我们常陷入诸多困境:需求反复变更导致开发返工,AI辅助编程易出现幻觉生成无效代码,多人协作时重复开发浪费精力,上线后频繁出现回归bug,文档与代码脱节成为“无效资产”。这些问题的核心,是缺乏一套统一可落地的研发范式,让需求、设计、开发、测试全流程形成闭环,而规格驱动开发(SDD,Spec-Driven Development),正是解决这一痛点的关键。 很多开发者对SDD的认知停留在“先写文档再写代码”的表面,甚至觉得它是“额外负担”,尤其在工期紧张的复杂项目中,更倾向于跳过规格设计直接编码。但事实上,SDD并非传统意义上的“文档绑架”,而是结合AI时代研发特点,形成的一套高效可落地的工程化方法。 本文结合OpenSpec这一主流SDD工具,从实操层面拆解SDD在复杂业务系统中的落地全流程,解答工具使用、流程设计、痛点解决等关键问题,帮助每一位开发者真正用好SDD,提升复杂系统研发效率与质量。 核心概念明确 SDD中的Spec(Specification,规格),本质是对业务需求、技术设计、实现细节的标准化描述,是整个研发流程的“唯一真理来源”。与传统

By Ne0inhk
把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

把废弃的腾讯云服务器改为 Openclaw 仅需一句话!!!(附带免费白嫖AI模型)

大家好,我是热爱探索AI前沿技术的LucianaiB。 前面我尝试了,感兴趣的可以才是部署一下试试 1.在 Windows 上部署 Openclaw:https://mp.weixin.qq.com/s/iF3ED1e649kkmdR26Y1xiw 2.把 Openclaw 接入到 Moltbook:https://mp.weixin.qq.com/s/QUrB50iwRGGdkl1LO-Tl8Q 相信很多技术爱好者都有这样的经历:趁着双十一或者大促,脑子一热买了一台腾讯云或者阿里云的服务器。买的时候雄心勃勃,想着要搭建博客、跑脚本、做图床。结果呢?大概率是跑了几个自动化签到脚本后,它就静静地躺在控制台里“吃灰”,每个月白白扣费。 但是在自己的电脑运行 Openclaw 无法做到24小时的在运行,于是我就想到了我有一个好久不用的腾讯云服务器,之前购买主要是跑一些自动化签到脚本,并没有实际做什么具体工作。于是我就想到把废弃的腾讯云服务器改为 Openclaw 的24小时的服务器。 于是,

By Ne0inhk
云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代

引言:人工智能的未来——云平台的卓越突破 在当今科技飞速发展的时代,人工智能(AI)技术正深刻地改变着我们生活与工作方式的方方面面。作为AI领域的创新者与领航者,云平台始终走在技术前沿,凭借无穷的热情与智慧,致力于发掘AI的无限潜能,努力为全球用户描绘更加智能、高效、便捷的未来。 向阿里、腾讯等多家云平台也紧跟潮流推出最新力作——DeepSeek满血版。将为用户带来前所未有的体验革新。DeepSeek满血版的问世标志着云平台在AI技术征途上的一个新里程碑,推动行业迈向更加辉煌的未来。为了让更多的用户亲身感受这一革命性技术成果,云平台推出了免费Tokens的特权活动,让每一位用户都能够充分体验DeepSeek满血版的强大功能,并一同见证AI推理技术的突破性进展。 推荐阅读:Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力 技术创新与核心突破:DeepSeek满血版的飞跃 DeepSeek满血版是云平台在AI推理领域的重要突破,它是首个完全通过强化学习训练的大型语言模型。与传统的监督微调方式不同,DeepSeek满血版仅凭奖励信号便开发出了出色的推理

By Ne0inhk
商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿

商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 文章目录 * 商贸赛道“智选优品”—基于大数据与AI驱动的跨境电商平台项目参考逐字稿 * 开场与团队介绍 (3分钟) * 第一部分:项目背景与政策支持 (8分钟) * 第二部分:项目目标与预期成果 (5分钟) * 第三部分:技能要点展示 (15分钟) * 第四部分:项目体系与人员分工 (8分钟) * 第五部分:创新点与独特之处 (10分钟) * 第六部分:情景演示与设备调试 (8分钟) * 第七部分:总结与致谢 (3分钟) 近期我们团队收到很多粉丝的后台留言请求,随着每年一届的“全国职业院校技能大赛”(以下称为国赛)升级为“世界职业院校技能大赛”(以下称为世校赛),那么由原先的围绕技术厂商的服务器端进行开展技能模块转变为了:三自主即自主确定参赛项目名称,自主设计参赛项目内容,自主选择参赛设备。赛制进行了一次重大级别的改革,很多参赛院校包括指导老师们对这种新模式的流程不熟悉,于是在后台给我们团队留言,希望我们能对新赛制的各个赛道出一些可以参考的资料,我们

By Ne0inhk