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

算法28,前缀和,寻找数组中的中心下标

这份笔记的核心内容是解决算法题“寻找数组的中心下标”LeetCode 724。简单来说就是找到一个下标i使得该位置左边所有数字的和等于右边所有数字的和。如果存在多个返回最左边的那个。笔记中记录了两种解法其中解法二利用前缀和/前后缀和是最优解。1. 核心思路解析方法一暴力法笔记上方不推荐思路对于每个位置i都重新遍历一遍数组分别计算左边和右边的和然后进行比较。缺点时间复杂度高为 O(N2)。笔记中也写了“暴力每次枚举中心下标左边一遍右边一遍”。方法二前缀和 后缀和笔记下方推荐这是笔记重点推导的方法利用了空间换时间的思想。定义两个数组f数组前缀和f[i]表示从数组开头0到i位置的所有元素之和从左往右累加。公式f[i] f[i-1] nums[i-1]g数组后缀和g[i]表示从数组末尾n-1到i位置的所有元素之和从右往左累加。公式g[i] g[i1] nums[i1]判断逻辑遍历数组如果某个位置i满足f[i] g[i]说明左边和等于右边和i就是中心下标。为了节省空间实际上可以只算一次总和total然后在遍历时动态计算右边和right total - left - nums[i]但笔记中使用的是更直观的数组记录法。2. 代码实现Java 版根据笔记中的代码逻辑整理如下public int pivotIndex(int[] nums) { int n nums.length; // 1. 定义并初始化 f 和 g 数组 // f[i] 存储 [0, i-1] 的元素和 int[] f new int[n]; // g[i] 存储 [i1, n-1] 的元素和 int[] g new int[n]; // 2. 计算前缀和 f (从左往右推) // 注意笔记中写的是 f[i] f[i-1] nums[i-1] for (int i 1; i n; i) { f[i] f[i - 1] nums[i - 1]; } // 3. 计算后缀和 g (从右往左推) // 注意笔记中写的是 g[i] g[i1] nums[i1] for (int i n - 2; i 0; i--) { g[i] g[i 1] nums[i 1]; } // 4. 遍历寻找中心下标 for (int i 0; i n; i) { // 如果左边和(f[i])等于右边和(g[i])返回下标 i if (f[i] g[i]) { return i; } } // 5. 没找到返回 -1 return -1; }3. 关键点解析对应笔记细节初始化边界f[0] 0因为第 0 个元素的左边没有任何元素和为 0。g[n-1] 0因为最后一个元素的右边没有任何元素和为 0。递推公式f[i] f[i-1] nums[i-1]当前的前缀和 前一个位置的前缀和 前一个位置的值。g[i] g[i1] nums[i1]当前的后缀和 后一个位置的后缀和 后一个位置的值。4. 进阶优化空间复杂度 O(1)如果觉得开两个数组太占内存可以只用一个变量记录左边和右边和用“总和 - 左边和 - 当前值”算出来public int pivotIndexOptimize(int[] nums) { int total 0; for (int num : nums) total num; // 先算总和 int leftSum 0; for (int i 0; i nums.length; i) { // 右边和 总和 - 左边和 - 当前元素 if (leftSum total - leftSum - nums[i]) { return i; } leftSum nums[i]; // 更新左边和 } return -1; }
http://www.zskr.cn/news/1342643.html

相关文章:

  • 11.三层网络VXLAN
  • 【SSD】闪存1
  • 2026年工业胶粘材料国产化趋势白皮书:PI 金手指胶带的高温性能与应用突破
  • 学Simulink——多路输出反激式开关电源(SMPS)交叉调整率改善仿真
  • 手把手教你学Simulink——高频隔离型双向 DC-DC 变换器的软开关(ZVS/ZCS)实现仿真
  • 鸿蒙中的自由流转
  • 2026年4月钢边止水带企业推荐分析,聚乙烯闭孔泡沫板/聚乙烯泡沫棒/钢边止水带/橡胶止水带,钢边止水带生产厂家找哪家 - 品牌推荐师
  • 中画幅风格仅限Pro订阅者可用?不!3个未公开API参数+本地化--seed锁定技巧,让免费账户稳定输出中画幅质感
  • 输出函数print
  • 几十万买的数字孪生低代码平台集体落灰?被隐瞒的落地真相,终于说透了
  • 408 每日一题 Day 2:二叉树的重构与遍历
  • leetcode思路-236 二叉树的最近公共祖先
  • 分布式团队的代码协作规范:从分支策略到提交信息格式
  • Cell Host Microbe | 西奈山伊坎医学院房刚团队揭示肠道微生物的表观遗传“押注对冲“策略
  • 远程技术面试的潜规则:摄像头角度可能影响你的录用
  • VisionPro 中 验证工具 ID Verfiction
  • 用Claude Code做了一件事,现在AI比我还了解我?
  • 对比直接使用厂商API与通过Taotoken调用的体验差异
  • 告别被封号!这款30项检测全过的“隐形浏览器”火了
  • 通宵降AI率?10款降AI工具亲测:哪个神器一次过,哪个白花钱
  • Spec-Kit + Superpowers 实战:Go语言博客论坛系统的规范驱动开发
  • 微波遥感杂谈五(微波辐射计)
  • 适配多层级组织管理,科学运用 360 度反馈打造公平高效绩效文化
  • CVPR 2026 预讲会54位讲者云集| 6大方向+5个专场
  • 鸿蒙备考题库页面构建:错题本、小组榜单与备考提示模块详解
  • 永久免费的国产模型
  • 从 35,000 行 WhatsApp 对话到一个会说话的 AI 销售员——OpenClaw 多层记忆架构实战
  • 2026年5月天津五粮液回收机构权威度实测评测 - 优质品牌商家
  • 逆向苹果私有框架!他把第三方视频逼成了macOS原生壁纸
  • 郯城本地苗木供应商评测:山东,临沂,江苏,乌桕苗木、巨紫荆苗木、日本红枫苗木、朴树苗木、榉树苗木、樱花苗木、欧洲枫香苗木选择指南 - 优质品牌商家