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

 个人主页: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]含义就不同,我们需要理解的是思想。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十二、Seata的⾼可⽤

目录 11.1. mysql存储数据11.2 整合注册中心1、为什么要整合注册中心 &#xff1f;2、windows版seata整合nacos 11.1. mysql存储数据 11.2 整合注册中心 1、为什么要整合注册中心 &#xff1f; 现在我们只有⼀个seata 客户端配置seata.service.grouplist.default127.0.0.1:8…

DRF从入门到精通七(djangorestframework-simplejwt、定制返回格式、多方式登录)

文章目录 一、djangorestframework-simplejwt快速使用1.基础使用步骤2.自己配置视图校验访问局部配置认证及权限类全局配置认证及权限类 3.关于双token认证问题 二、定制返回格式三、多方式登录 一、djangorestframework-simplejwt快速使用 JWT主要用于签发登录接口需要配合认证…

频谱论文:约束飞行轨迹下基于生成对抗网络的三维无线电地图重构

#频谱# T. Hu, Y. Huang, J. Chen, Q. Wu and Z. Gong, "3D Radio Map Reconstruction Based on Generative Adversarial Networks Under Constrained Aircraft Trajectories," in IEEE Transactions on Vehicular Technology, vol. 72, no. 6, pp. 8250-8255, June …

css样式中设置height: calc(100vh-50px)不生效

在CSS中&#xff0c;100vh 表示视口&#xff08;viewport&#xff09;的高度。视口是指浏览器窗口中可见内容的区域&#xff0c;即用户能够看到的网页部分。 100vh 表示视口高度的百分比&#xff0c;具体数值取决于当前浏览器窗口的高度。例如&#xff0c;如果浏览器窗口的高度…

Vue - 多行文本“展开、收起”功能

TextClamp 使用 js 实现文本展开、收起&#xff0c;并非纯 CSS 实现。 Props&#xff1a; fontSize&#xff1a;Number&#xff0c;默认&#xff1a;14lines&#xff1a;Number&#xff0c;默认&#xff1a;1lineHeight&#xff1a;Number&#xff0c;默认&#xff1a;20 F…

洛谷 P1462 通往奥格瑞玛的道路

题目连接 分析 注意到很明显的单调性&#xff0c;所以可以使用二分来求解。 接下来我们把城市看成点&#xff0c;公路看成边&#xff0c;把扣血量看成边权&#xff0c;那么从点 1 1 1 开始跑一遍最短路&#xff0c;如果点 1 1 1 到点 n n n 的距离&#xff08;最少扣血量…

字符编码转换

宽窄字符和字符编码的关系 多字节(窄)字符&#xff1a;在C/C中&#xff0c;char是一种数据类型&#xff0c;规定sizeof(char)1&#xff0c;即一个char占用一个字节&#xff0c;1Byte8bit。并没有规定一个char就要与ASCII对应&#xff0c;不过&#xff0c;通常情况下char值与AS…

2023 年博客总结

当无所事事&#xff0c;没有多少收获的时候&#xff0c;时间过得格外的快… 当充实有为&#xff0c;经常有收获有进步的时候&#xff0c;才觉得时间没有浪费… 2023年收获不多… 以前说孩子小&#xff0c;需要照顾所以没时间&#xff0c;我以为孩子大点就有时间了&#xff0c;…

图片处理相关网站(图片分辨率、尺寸修改、AI扩图等)

分享一些免费的可进行图片的各种处理的网站&#xff0c;包括图片分辨率、尺寸修改、AI扩图等&#xff0c;持续增加中。。。 1.photokit.com 可进行图片分辨率、尺寸、压缩等修改。 免费在线图片编辑器 - 在线抠图、改图、修图、美图 - PhotoKit.comPhotoKit是一款免费的…

增量预训练经验积累(3)

站在巨人的肩膀上才能走的更远~本文主要是针对《千亿参数开源大模型 BLOOM 背后的技术》进行学习和提取关键经验。 1、BLOOM与Megatron-DeepSpeed 1.1 BLOOM训练细节 BLOOM 的模型架构与 GPT3 非常相似,只是增加了一些改进,176B BLOOM 模型的训练于 2022 年 3 月至 7 月期…

【RocketMQ每日一问】RocketMQ SQL92过滤用法以及原理?

1.生产端 public class SQLProducer {public static int count 10;public static String topic "xiao-zou-topic";public static void main(String[] args) {DefaultMQProducer producer MQUtils.createLocalProducer();IntStream.range(0, count).forEach(i -&g…

自动化测试面试题及答案大全(上)

selenium中如何判断元素是否存在&#xff1f; 没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获的方式判断selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不可以&#xff0c;想点击的话&#xff0c;可以用…

[ASIS 2019]Unicorn shop

点入题目看见四个可购买的东西&#xff0c;但是都购买不了&#xff0c;最后一个价格大的脱俗&#xff0c;猜测成功买到后会得到flag&#xff0c;但是购买时提示操作失败只允许一个字符。查看源码发现在utf-8后面特意标注提示 涉及到了字符编码和字符集的概念&#xff1a; UTF-…

Fiddler工具 — 5.Fiddler页面布局之菜单栏(二)

3、Rules规则菜单&#xff1a; Hide Image Requests&#xff1a;隐藏图片请求 触发器控制&#xff1a;是否在Web Session列表中显示图像类Session。 Hide HTTPS CONNECTs&#xff1a;隐藏HTTPS连接 触发器控制&#xff1a;是否在Web Session列表中显示使用CONNECT请求方法的Se…

2024 年度 AAAI Fellows 揭晓!清华大学朱军教授入选!

今日&#xff0c;国际人工智能领域最权威的学术组织 AAAI 揭晓 2024 年度 Fellows 评选结果&#xff0c;新增 12 位 Fellow。 其中&#xff0c;清华大学计算机系教授朱军因「在机器学习理论与实践方面做出的重大贡献」而成功入选&#xff0c;成为本年度入选的唯一华人学者&…

【React】常用Hook函数的梳理和总结(第二篇)

1. 前言 本篇梳理和总结React中常用的Hook函数。 欢迎大家来到Hook的世界&#xff0c;真的贼好用~ 2. 常用Hook函数 Hook说明示例useState(initialState) 功能&#xff1a;为函数组件添加状态变量&#xff0c;输入可是基本数据类型或引用数据类型&#xff0c;也可以是不带参数…

2023最大技术潮:大模型冲击下的智能汽车

作者 |德新 编辑 |王博 过去这年最大的技术潮&#xff0c;非大模型莫属。 2023年初&#xff0c;由ChatGPT掀起的浪花&#xff0c;迅速地演变成了席卷全球的AI科技浪潮。汽车行业在其中也不可避免。各大车企纷纷投入与大模型相关的布局。 长城官宣成立了AI Lab&#xff0c;到…

尝试解决 H5无法播放mp3录音问题

1.问题描述 将H5传递的录音 media_id 通过微信获取临时素材接口获取到录音文件流之后&#xff0c;转为mp3文件上传到服务器。但是H5却没办法播放这个mp3文件。这个文件只能在播放器上播放&#xff0c;比如网易云什么的。不能直接在微信&#xff0c;浏览器上播放 2.原因分析 通…

山西电力市场日前价格预测【2024-01-04】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-04&#xff09;山西电力市场全天平均日前电价为197.93元/MWh。其中&#xff0c;最高日前电价为376.04元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

Go语言基础简单了解

文章目录 前言关于Go学习流程 基础语法注释变量常量数据类型运算符fmt库 流程控制if、switch、selectfor、break、continue遍历String 函数值传递和引用传递deferinit匿名、回调、闭包函数 数组和切片Map结构体自定义数据类型接口协程和channel线程锁异常处理泛型文件读取文件写…