LeetCode 0724.寻找数组的中心下标:前缀和(时空复杂度O(n)+O(1))


title: 724.寻找数组的中心下标
date: 2024-07-08 13:22:58
tags: [题解, LeetCode, 简单, 数组, 前缀和]

【LetMeFly】724.寻找数组的中心下标:前缀和(时空复杂度O(n)+O(1))

力扣题目链接:https://leetcode.cn/problems/find-pivot-index/

给你一个整数数组 nums ,请计算数组的 中心下标

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1

 

示例 1:

输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。

示例 2:

输入:nums = [1, 2, 3]
输出:-1
解释:
数组中不存在满足此条件的中心下标。

示例 3:

输入:nums = [2, 1, -1]
输出:0
解释:
中心下标是 0 。
左侧数之和 sum = 0 ,(下标 0 左侧不存在元素),
右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。

 

提示:

  • 1 <= nums.length <= 104
  • -1000 <= nums[i] <= 1000

 

注意:本题与主站 1991 题相同:https://leetcode-cn.com/problems/find-the-middle-index-in-array/

解题方法:前缀和

“i是中心下标”等价于“i左边的元素之和 * 2 = 数组元素元素之和 - nums[i]”。

因此我们可以先遍历一遍数组得到数组之和,之后从第一个元素开始向后遍历并累加得到(i左侧元素之和),这样就能判断当前遍历到的i是不是“中心下标”了。

若遍历结束后未找到中心下标,则返回-1。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:int pivotIndex(vector<int>& nums) {int sum = accumulate(nums.begin(), nums.end(), 0);int nowSum = 0;for (int i = 0; i < nums.size(); i++) {if (sum - nums[i] == nowSum * 2) {return i;}nowSum += nums[i];}return -1;}
};
Go
package mainfunc pivotIndex(nums []int) int {sum := 0for _, t := range nums {sum += t}nowSum := 0for i, t := range nums {if sum - t == nowSum * 2 {return i}nowSum += t}return -1
}
Python
from typing import Listclass Solution:def pivotIndex(self, nums: List[int]) -> int:sum_ =sum(nums)nowSum = 0for i in range(len(nums)):if sum_ - nums[i] == nowSum * 2:return inowSum += nums[i]return -1
Java
class Solution {public int pivotIndex(int[] nums) {int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}int nowSum = 0;for (int i = 0; i < nums.length; i++) {if (sum - nums[i] == nowSum * 2) {return i;}nowSum += nums[i];}return -1;}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140266165

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

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

相关文章

数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )

1.判断二叉树是否是完全二叉树 辨别&#xff1a; 不能使用递归或者算节点个数和高度来判断。 满二叉树可以用高度和节点来判断&#xff0c;因为是完整的。 但是完全二叉树前面是满的&#xff0c;但是最后一层是从左到右连续这种 如果仍然用这种方法的话&#xff0c;如下图…

暑期备考2024小学生古诗文大会:吃透真题和知识点(持续)

2024年上海市小学生古诗文大会的自由报名初赛将于10月19日&#xff08;星期六&#xff09;正式开始&#xff0c;还有3个多月的时间。 为帮助孩子们备考&#xff0c;我持续分享往年上海小学生古诗文大会真题&#xff0c;这些题目来自我去重、合并后的1700在线题库&#xff0c;每…

加密与安全_密钥体系的三个核心目标之完整性解决方案

文章目录 Pre机密性完整性1. 哈希函数&#xff08;Hash Function&#xff09;定义特征常见算法应用散列函数常用场景散列函数无法解决的问题 2. 消息认证码&#xff08;MAC&#xff09;概述定义常见算法工作原理如何使用 MACMAC 的问题 不可否认性数字签名&#xff08;Digital …

SketchUp Pro 2024:现代科技之诗意体验

在那遥远的唐朝&#xff0c;李白曾以诗酒为伴&#xff0c;游历山川&#xff0c;挥洒才情。而今&#xff0c;若李白穿越时空&#xff0c;手握现代科技之利器——SketchUp Pro 2024&#xff0c;定会以诗意之笔&#xff0c;描绘这款软件的神奇与魅力。 初识SketchUp Pro 2024 初…

Vue Router:History 模式 vs. Hash 模式

在开发 SPA&#xff08;单页应用程序&#xff09;时&#xff0c;路由管理是不可或缺的一部分。Vue.js 框架中的 Vue Router 提供了两种主要的路由模式&#xff1a;History 模式和 Hash 模式。理解这两种模式的区别及其实现方式&#xff0c;对于开发和部署 Vue 应用至关重要。 …

k8s record 20240708

一、PaaS 云平台 web界面 资源利用查看 Rancher 5台 CPU 4核 Mem 4g 100g的机器 映射的目录是指docker重启后&#xff0c;数据还在 Rancher可以创建集群也可以托管已有集群 先docker 部署 Rancher&#xff0c;然后通过 Rancher 部署 k8s 想使用 kubectl 还要yum install 安…

如何分析前后端bug?

如何分析前后端bug&#xff0c;我来支你1️⃣招 &#x1f4dd;一般通过查看接口的方式分析前后端bug。 . 【方法】&#xff1a; web项目&#xff0c;用浏览器自带的F12抓包看接口请求。 app客户端&#xff0c;一般用fiddler等工具进行抓包接口。 . ✅用经典的电商项目举例&…

应用软件受到网络攻击怎么办?

大家都知道在目前的互联网社会中&#xff0c;大型的网络游戏与电商网站企业是网络攻击的重要对象&#xff0c;同时软件应用也无法避免地会受到各种网络攻击&#xff0c;那么当我们的软件应用被攻击时&#xff0c;该怎么办呢&#xff1f; 首先我们可以使用高防CDN&#xff0c;安…

2. 年龄问题

年龄问题 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 S 夫人一向很神秘。这会儿有人问起她的年龄&#xff0c;她想了想说&#xff1a; "2020 年前&#xff0c;我丈夫的年龄刚好是我的 22 倍&#xff0c;…

ATA-8035射频功率放大器在声动力疗法中的应用

声动力疗法是一种基于声波能量的治疗方法&#xff0c;广泛应用于医疗和美容领域。它利用高强度聚焦的声波来实现切割、破碎或加热组织&#xff0c;以治疗各种疾病和美容问题。在声动力疗法中&#xff0c;射频功率放大器起着至关重要的作用&#xff0c;它负责提供足够的能量来激…

达梦数据库的系统视图v$auditrecords

达梦数据库的系统视图v$auditrecords 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$AUDITRECORDS 是专门用来存储和查询数据库审计记录的重要系统视图。这个视图提供了对所有审计事件的访问权限&#xff0c;包括操作类型、操作用户、时间戳、目标对象等信…

详解 | 什么是GeoTrust

GeoTrust是一家全球知名的数字证书颁发机构&#xff08;Certificate Authority&#xff0c;简称CA&#xff09;&#xff0c;专注于提供SSL/TLS证书和其他相关的网络安全产品。 1、历史背景&#xff1a; GeoTrust成立于2001年&#xff0c;最初作为一个独立的公司运营。2006年&a…

js+spring boot实现简单前后端文件下载功能

jsboot项目实现自定义下载 一、前端页面 1、先导入axios的js包 2、注意axios响应的格式&#xff1a;result.data.真实的数据内容 3、这里请求的url就是你boot项目的getMapping的url&#xff0c;保持一致即可 4、如果想在后端设置文件名&#xff0c;那么后端生成后&#xf…

目标检测算法介绍来了!

随着人工智能技术的迅猛发展&#xff0c;目标检测算法在计算机视觉领域扮演着越来越重要的角色。它广泛应用于安防监控、自动驾驶、医学影像分析、机器人视觉等多个领域&#xff0c;极大地推动了智能化进程。本文将对目标检测算法进行深入的探讨&#xff0c;包括其基本原理、发…

使用 Streamlit 和 asyncio 模块进行异步编程

概述 Streamlit 是一个用于构建数据应用程序的强大工具&#xff0c;但它本身并不直接支持异步编程。然而&#xff0c;通过结合 Python 的 asyncio 模块&#xff0c;我们可以在 Streamlit 应用中实现异步处理&#xff0c;从而提高应用的响应性和效率。 为什么需要异步编程 在…

安卓应用开发学习:腾讯地图SDK应用改进,实现定位、搜索、路线规划功能集成

一、引言 我的上一篇学习日志《安卓应用开发学习&#xff1a;通过腾讯地图SDK实现定位功能》记录了利用腾讯地图SDK实现手机定位功能&#xff0c;并能获取地图中心点的经纬度信息。这之后的几天里&#xff0c;我对《Android App 开发进阶与项目实战》一书第九章的内容深入解读…

【深度学习实战(44)】Anchor based and Anchor free(无锚VS有锚)

1 anchor-based 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题。在单阶段检测器中&#xff0c;这些候选区域就是通过滑窗方式产生的 anchor&#xff1b;在两阶段检测器中&#xff0c;候选区域是 RPN 生成的 proposal&#xff0c;但是 RPN 本身仍然是对滑窗…

leetcode--层数最深叶子节点的和

leetcode地址&#xff1a;层数最深叶子节点的和 给你一棵二叉树的根节点 root &#xff0c;请你返回 层数最深的叶子节点的和 。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,null,6,7,null,null,null,null,8] 输出&#xff1a;15 示例 2&#xff1a; 输入&#xff…

多点GRE over IPsecVPN模式下nhrp的调优

一、实验目的 在多点GRE over IPsecVPN模式下对nhrp进行调优&#xff0c;在总部开启重定向、在分支开启shortcut 网络拓扑&#xff1a; 二、基础设置 &#xff08;一&#xff09;如图所示配置接口地址和区域&#xff0c;连接PC的接口位于trust区域、连接路由器的接口位于unt…

qt5.15关于qradiobutton遇到的坑

前言 不知道是只有我遇到了&#xff0c;还是qt本身就存在这个bug 当将2个qradiobutton放入到一个布局内&#xff0c;然后进行来回切换&#xff0c;若无数据刷新的情况下&#xff0c;切换无异常&#xff0c;当窗体内有数据开始刷新了&#xff0c;则点击其中一个qradiobutton&am…