前缀和算法 -- 寻找数组的中心坐标

个人主页:Lei宝啊
愿所有美好如期而遇

本题链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
输入描述
给定一个数组,接口为int pivotIndex(vector<int>& nums)
输出描述
我们以示例1为例画图解释:

我们返回下标3。
算法分析
算法一:暴力求解
直接遍历数组,外层遍历到哪个i,里层就遍历一次整个数组求和比较,时间复杂度为O(N^2),这种时间复杂度我们不能接受。
算法二:前缀和
方法一:
我们创建dp表,dp[i]表示从下标0到下标i的元素和,用一个变量sum记录。
预处理dp表

使用dp表计算
接下来我们仍然是遍历数组,但是我们需要提前计算出边界问题,一个是0位置的边界,一个是n-1位置的边界(这个边界在循环后判断),我们根据上图来判断一下0这个边界,0的左边什么都没有,题目使其和为0,所以我们判断dp[n-1] - dp[0] == 0就return 0,否则继续我们的循环,我们的循环从1开始,到n-1边界结束,然后判断这个边界,即dp[n-2] == 0,我们return n-1; 否则就是没有找到这样的中间下标,我们返回-1。
解题源码:
class Solution
{
public:int pivotIndex(vector<int>& nums){int n = nums.size();int sum = 0;vector<int> dp(n, 0);//dp[i]表示i位置及其前部分的和for (int i = 0; i < n; i++){sum += nums[i];dp[i] = sum;}if (dp[n - 1] - dp[0] == 0) return 0;for (int i = 1; i < n - 1; i++){if (dp[i - 1] == dp[n - 1] - dp[i]){return i;}}if (dp[n - 2] == 0) return n - 1;return -1;}
};
方法二:
我们创建前缀和dp表和后缀和dp表,这里的dp[i]和我们方法一的含义是不同的,这里的dp[i]意为下标0到下标i-1的和,那么dp[i-1]意为下标0到下标i-2的和,以此类推。
预处理dp表
前缀和是从前往后加,后缀和是从后往前加,什么意思呢?我们看图

那么写成代码如何推导这两个dp表呢?
dp[i]是下标0到下标i-1的和,dp[i-1]是下标0到下标i-2元素的和......,dp[1]就是dp[0]加上下标为0元素的值,dp[0]我们初始化为0。因为题目规定下标为0或者右边的边界时,左边元素和,右边元素和为0,所以我们dp[0],dp[n-1]初始化为0。
我们写成公式就是
- 前缀 dp[i] = dp[i-1] + nums[i-1],i从1开始
- 后缀 dp[i] = dp[i+1] + nums[i+1],i从n-2开始
使用dp表计算
我们使前缀dp[i] 与 后缀dp[i]做比较,相等则返回下标,循环外则返回-1。
解题源码
class Solution
{
public:int pivotIndex(vector<int>& nums){int n = nums.size();vector<int> f(n, 0);vector<int> g(n, 0);for (int i = 1; i < n; i++)f[i] = f[i - 1] + nums[i - 1];for (int i = n - 2; i >= 0; i--)g[i] = g[i + 1] + nums[i + 1];for (int i = 0; i < n; i++){if (f[i] == g[i])return i;}return -1;}
};
其实博主个人感觉方法一好理解一点,不过方法二的思想值得我们去学习,同时不要死记前缀和,后缀和公式,dp[i]的情况是不同的,就像我们的方法一和方法二,他们中的dp[i]含义就不同,我们需要理解的是思想。
相关文章:
前缀和算法 -- 寻找数组的中心坐标
个人主页:Lei宝啊 愿所有美好如期而遇 本题链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 输入描述 给定一个数组,接口为int pivotIndex(vector<int>& nums) 输出描述 我们以示例1为例画图解释…...
autograd与逻辑回归
一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释: 功能:自动求取梯度 • tensors: 用于求导的张量,如 loss • retain_graph : 保存计算图 •…...
Xshell 从github克隆项目:使用ssh方式。
接上文: https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了,但是速度太磕碜了,磕碜到难以直视。 找到另外一种办法,使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站,不能点上边…...
C++:通过erase删除map的键值对
map是经常使用的数据结构,erase可以删除map中的键值对。 可以通过以下几种方式使用erase 1.通过迭代器进行删除 #include <iostream> #include <map> #include <string> using namespace std;void pMap(const string& w, const auto& m) {cout&l…...
华为月薪25K的自动化测试工程师到底要会那些技能!
前言 3年自动化测试软件测试工程师职业生涯中,我所经历过的项目都是以自动化测试为主的。由于自动化测试是一个广泛的领域,我将自己的经验整理了一下分享给大家,话不多说,直接上干货。 自动化测试的目标和实践选择合适的自动化…...
diffusers 源码待理解之处
一、训练DreamBooth时,相关代码的细节小计 ** class_labels timesteps 时,模型的前向传播怎么走?待深入去看 ** 利用class_prompt去生成数据,而不是instance_prompt class DreamBoothDataset(Dataset):"""A dat…...
正则表达式 详解,10分钟学会
大家好,欢迎来到停止重构的频道。 本期我们讨论正则表达式。 正则表达式是一种用于匹配和操作文本的工具,常用于文本查找、文本替换、校验文本格式等场景。 正则表达式不仅是写代码时才会使用,在平常使用的很多文本编辑软件,都…...
【排序算法】归并排序与快速排序:深入解析与比较
文章目录 1. 引言2. 归并排序(Merge Sort)3. 快速排序(Quick Sort)4. 归并排序与快速排序的比较5. 结论 1. 引言 排序算法是计算机科学中最基本且至关重要的概念之一。它们不仅是理解更复杂算法和数据结构的基石,而且…...
万字长文谈自动驾驶bev感知(一)
文章目录 prologuepaper listcamera bev :1. Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D2. M2BEV: Multi-Camera Joint 3D Detection and Segmentation with Unified Birds-Eye View Representation3. BEVDet: High-Pe…...
cfa一级考生复习经验分享系列(十七)
考场经验: 1.本人在Prometric广州考试中心,提前一天在附近住下,地方比较好找,到了百汇广场北门,进去就可以看见电梯直达10楼。进去之后需要现场检查行程卡和健康码,然后会问最近你有没有发烧咳嗽等问题&…...
机器人活动区域 - 华为OD统一考试
OD统一考试 题解: Java / Python / C++ 题目描述 现有一个机器人,可放置于 M x N 的网格中任意位置,每个网格包含一个非负整数编号,当相邻网格的数字编号差值的绝对值小于等于 1 时机器人可以在网格间移动。 问题: 求机器人可活动的最大范围对应的网格点数目。 说明: 网格…...
三、HTML元素
一、HTML元素 HTML 文档由 HTML 元素定义。 *开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag)。 二、HTML 元素语法 HTML 元素以开始标签起始。HTML 元素以结束标签终止。元素的内容是…...
置顶> 个人学习记录一览
个人学习记录一览表 写个说明 知识学的好,不如笔记记得好,知识点的遗忘在所难免,这里记录我个人的学习过程,以备后面二次学习使用。 Linux 操作系统 Linux 操作系统 001-介绍 Linux 操作系统 002-VMware Workstation的相关操…...
c++重载操作符
支持重载操作符是c的一个特性,先不管好不好用,这起码能让它看起来比其他语言NB很多,但真正了解重载操作符后,就会发现这个特性...就这?本文分两个部分 重载操作符简介和使用——适用新手重载操作符的原理和sao操作——…...
C# 如何读取Excel文件
当处理Excel文件时,从中读取数据是一个常见的需求。通过读取Excel数据,可以获取电子表格中包含的信息,并在其他应用程序或编程环境中使用这些数据进行进一步的处理和分析。本文将分享一个使用免费库来实现C#中读取Excel数据的方法。具体如下&…...
Vue2面试题:说一下对vuex的理解?
五种状态: state: 存储公共数据 this.$store.state mutations:同步操作,改变store的数据 this.$store.commit() actions: 异步操作,让mutations中的方法能在异步操作中起作用 this.$store.dispatch() getters: 计算属性 th…...
elasticsearch系列五:集群的备份与恢复
概述 前几篇咱们讲了es的语法、存储的优化、常规运维等等,今天咱们看下如何备份数据和恢复数据。 在传统的关系型数据库中我们有多种备份方式,常见有热备、冷备、全量定时增量备份、通过开发程序备份等等,其实在es中是一样的。 官方建议采用s…...
【Elasticsearch源码】 分片恢复分析
带着疑问学源码,第七篇:Elasticsearch 分片恢复分析 代码分析基于:https://github.com/jiankunking/elasticsearch Elasticsearch 8.0.0-SNAPSHOT 目的 在看源码之前先梳理一下,自己对于分片恢复的疑问点: 网上对于E…...
elasticsearch如何操作索引库里面的文档
上节介绍了索引库的CRUD,接下来操作索引库里面的文档 目录 一、添加文档 二、查询文档 三、删除文档 四、修改文档 一、添加文档 新增文档的DSL语法如下 POST /索引库名/_doc/文档id(不加id,es会自动生成) { "字段1":"值1", "字段2&q…...
opencv期末练习题(2)附带解析
图像插值与缩放 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_B…...
半导体行业数据解析:销售额与资本支出双高增长背后的逻辑
1. 行业数据深度解析:半导体销售额与资本支出的双高增长最近和几个在晶圆厂和设计公司工作的朋友聊天,大家不约而同地提到了一个词:“忙疯了”。订单排到明年,产线24小时连轴转,连带着上游的设备商和材料供应商都跟着“…...
Zotero PDF Translate终极配置指南:如何一键激活20+翻译服务
Zotero PDF Translate终极配置指南:如何一键激活20翻译服务 【免费下载链接】zotero-pdf-translate Translate PDF, EPub, webpage, metadata, annotations, notes to the target language. Support 20 translate services. 项目地址: https://gitcode.com/gh_mir…...
对比按需计费与Token Plan套餐的实际支出感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按需计费与Token Plan套餐的实际支出感受 1. 引言:两种计费模式的选择 对于个人开发者或小型团队而言,…...
Cursor Pro破解工具完整指南:如何绕过限制实现永久免费使用
Cursor Pro破解工具完整指南:如何绕过限制实现永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached you…...
TrendForge 每日精选:10 个热门开源项目,今日总获星 11321 颗!
TrendForge 每日精选热门开源项目发布 TrendForge 致力于追踪全球开源项目动态,每日为开发者精选最具价值的 GitHub 项目。今日共收录 10 个热门项目,项目描述已自动翻译为智能中文翻译版,便于理解。 今日最热项目 Top 10 mattpocock/skills&…...
1k Star的p-retry,让异步操作失败自动重试
文章目录1k Star的p-retry,让异步操作失败自动重试核心功能适用场景注意事项1k Star的p-retry,让异步操作失败自动重试 sindresorhus开源的p-retry项目,目前在GitHub上获得1009个Star。这个库的核心功能是为异步操作添加重试机制,…...
从IR压降到远程采样:大电流PCB供电设计的实战经验与陷阱规避
1. 项目背景与问题浮现几年前,我参与了一个项目,主电源是一个标准的开放式机架电源,需要为一个位于机箱内相对较远的模块提供5V、约20A的直流电。最初的供电路径设计是依靠PCB走线,我们使用了1盎司铜厚的板材。问题很快就出现了&a…...
pip cache purge 清理下载缓存文件
如上图所示的这个目录是 Python 的包管理工具 pip 用来存储下载过的安装包(wheel 或源码包)的缓存。它的主要作用是在你下次安装同一个包时,可以直接从本地读取,而无需再次从网络下载,从而加快安装速度。 但是…...
onlybooks/llm项目解析:大语言模型本地部署与微调实战指南
1. 项目概述与核心价值最近在折腾大语言模型本地部署和微调的朋友,估计没少在各种开源社区和模型仓库里翻找。我自己也是,从早期的GPT-2到现在的各种百亿、千亿参数模型,一路踩坑过来,深感一个清晰、易用、维护良好的项目对效率提…...
别再手动写Prompt了!Lovable原生AI编排引擎深度解析(附12个已验证行业工作流)
更多请点击: https://intelliparadigm.com 第一章:Lovable无代码AI应用构建指南 Lovable 是一款面向业务人员与开发者的低门槛 AI 应用构建平台,它通过可视化编排、预置模型组件和自然语言驱动逻辑,实现无需编写代码即可部署可运…...
