01. 找到数组的中间位置 ——【Leetcode每日一题】

news2024/11/24 7:17:28

1991. 找到数组的中间位置

难度:简单

给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

中间位置 middleIndex 是满足 nums[0] + nums[1] + … + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + … + nums[nums.length-1] 的数组下标。

如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0

请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1

示例 1:

输入:nums = [2,3,-1,8,4]
输出:3
解释:
下标 3 之前的数字和为:2 + 3 + -1 = 4
下标 3 之后的数字和为:4 = 4

示例 2:

输入:nums = [1,-1,4]
输出:2
解释:
下标 2 之前的数字和为:1 + -1 = 0
下标 2 之后的数字和为:0

示例 3:

输入:nums = [2,5]
输出:-1
解释:
不存在符合要求的 middleIndex 。

示例 4:

输入:nums = [1]
输出:0
解释:
下标 0 之前的数字和为:0
下标 0 之后的数字和为:0

提示:

1 <= nums.length <= 100
-1000 <= nums[i] <= 1000

💡思路:

记数组的全部元素之和为 total\textit{total}total,当遍历到第 iii 个元素时,设其左侧元素之和为 sum\textit{sum}sum,则其右侧元素之和为 total−numsi−sum\textit{total}-\textit{nums}_i-\textit{sum}total−nums
i

−sum。左右侧元素相等即为 sum=total−numsi−sum\textit{sum}=\textit{total}-\textit{nums}_i-\textit{sum}sum=total−nums
i −sum,即 2×sum+numsi=total2\times\textit{sum}+\textit{nums}_i=\textit{total}2×sum+nums
i =total。
当中心索引左侧或右侧没有元素时,即为零个项相加,这在数学上称作「空和」(empty sum\text{empty sum}empty sum)。在程序设计中我们约定「空和是零」。
获取 nums 总数之和为 total ,中间数左侧数之和为 leftSum ,即 2 * leftSum + 中间数 = total

🍁代码:(Java)

public class PivotIndex {

    /**
     * @param nums 数组
     * @return
     */
    public int pivotIndex(int[] nums) {
      // 1. 获取nums数组总和
      final int total = Arrays.stream(nums).sum();

      // 2. 初始化中间数左侧之和
      int leftSum = 0;
      
      // 3. 遍历nums, 存在中间值返回,否则返回 -1
      for(int i = 0; i < nums.length; ++i) {
        total -= nums[i];
        if(leftSum == total) {
          return i;
        }
        leftSum += nums[i];
      }
      return -1;
    }

}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

注: 如有不足,欢迎评论区讨论!

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

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

相关文章

【dc-dc】降压恒压电源管理IC 平衡车控制器 电动车控制器 以太网交换机驱动芯片

产品 AP8851 一款宽电压范围降压型DC-DC 电源管理芯片&#xff0c;内部集成使能开关控制、基准电源、误差放大器、过热保护、限流保护、短路保护等功能&#xff0c;非常适合在宽输入电压范围具有优良的负载和线性调整度。AP8851 芯片包含每周期的峰值限流、软启动、过压保护和…

【计算机视觉 | 目标检测】术语理解9:AIGC的理解,对比学习,解码器,Mask解码器,耦合蒸馏,半耦合,图像编码器和组合解码器的耦合优化

文章目录 一、AIGC的理解二、对比学习三、解码器四、Mask解码器五、耦合蒸馏六、半耦合七、图像编码器和组合解码器的耦合优化 一、AIGC的理解 AIGC指的是使用人工智能技术自动生成的各类数字内容,包括文本、图像、音频、视频等。它利用机器学习模型进行智能化内容生成。 主要…

Oracle快速将A库的数据库对象同步到B库(包括数据)

1.在pl/sql中导出A的用户对象 2.导出表数据&#xff0c;直接导PDE文件 如果PDE不行的话就到选择第一个dmp 3.然后把用户B的对象重新创建一遍&#xff0c;数据导进去。 创建对象的时候table和sequence都要删掉重新创建&#xff0c;不然会报已存在。

你会合并数组吗?采用数组大小顺序排列合并C语言实现

第一个代码块进行的是两个数组进行合并&#xff0c;然后顺序排列出来定义两个数组里面各有几个元素然后采用循环输入相应的数字&#xff0c;这里注意是要在每一个数组中顺序排列的&#xff0c;也就是从大到小输入之后采用循环进行比较比较完跳出循环后因为两个数组中元素个数不…

【安装】安装MySQL 相关配置 Navicat 的使用入门 SQL语句初步

目录 安装MySQL选择custom选择MySQL Server选择服务安装路径和数据存储路径 配置MySQL配置端口号选择授权方式设置root用户的密码 Navicat建立连接新建数据库新建表添加字段设置主键 SQL语句DML&#xff08;重点&#xff09;DQL&#xff08;重点&#xff09;运算符其它函数增删…

视频去除水印怎么做?四个方法分享给你!

水印是在许多视频中常见的一种保护措施&#xff0c;但有时它有可能会妨碍我们对视频内容的欣赏。如果你想去除视频中的水印&#xff0c;下面将介绍四种简单有效的方法&#xff0c;让你轻松解决这个问题。 方法一&#xff1a;使用记灵在线工具 记灵在线工具是一款强大的在线视…

Shell通配符和正则表达式

目录 ​​​​​​​grep 通配符 正则表达式 grep grep家族有三大成员分别为&#xff1a; grep&#xff1a;支持使用基本正则表达式。 egrep&#xff1a;支持使用扩展正则表达式。 fgrep&#xff1a;不支持使用正则表达式&#xff0c;即所有的正则表达式中的元字符都将作…

mt管理器使用(app管理)

http://www.360doc.com/content/12/0121/07/13646414_997668971.shtml

常用的访问控制权限模型DAC RBAC

常用的访问控制权限模型DAC RBAC 文章目录 常用的访问控制权限模型DAC RBACLinux 自主访问控制与强制访问控制术语概念存取访问控制 Access Control自主访问控制强制访问控制 基于角色的权限控制模型RBAC模型管理方法RBAC0的管理命令RBAC0的系统支持方法RBAC0的高级审查持方法 …

❤️创意网页:经典透明登录页面(好看易学易用)

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

thinkphp模型递归查询

效果图&#xff1a; 查询代码&#xff1a; use app\model\Menu;function getMenuList(string $uid) {$list Menu::where(pid, $uid)->select();foreach ($list as $val) {$val[children] getMenuList($val->uid);}return $list; }function getMenuBelong(string $uid)…

springboot人事管理系统

本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL数据库等等&#xff1b;将按以下章节进行开发设计&#xff1b; 绪论&#xff1b;剖析项目背景,说明研究的内容。 开发技术&#xff1b;系统主要使用了java技术&#xff0c;b/s模式和myspl数据库&#xff0c;并…

如何操作MySQL数据库数据

目录 一、MySQL数据库概念 数据 表&#xff08;数据表&#xff09; 数据库 数据库管理系统 数据库的建立和维护功能 数据定义功能 数据操纵功能 数据库的运行管理功能 通信功能 数据流向 二、主流数据库分类 1.SQL Server 数据库 &#xff08;微软分公司产品&…

【力扣算法11】之 8. 字符串转换整数 (atoi) python

文章目录 问题描述示例1示例2示例3提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 m…

基于scrcpy的Android群控项目重构,集成Appium服务执行自动化测试用例

系列文章目录 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕元素信息并编写自动化事件&#xff08;视频&#xff09; 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕…

大数据与视频技术的融合趋势将带来怎样的场景应用?

视频技术和AI技术的融合是一种新兴的技术趋势&#xff0c;它将改变视频行业的运作方式。视频技术和AI技术的融合主要包括以下几个方面&#xff1a; 1&#xff09;人脸识别技术 人脸识别技术是AI技术的一个重要应用场景。它可以通过对视频中的人脸进行识别和分析&#xff0c;实…

Spark(23):SparkStreaming之DStream转换

目录 0. 相关文章链接 1. DStream转换概述 2. 无状态转化操作 2.1. Transform 2.2. join 3. 有状态转化操作 3.1. UpdateStateByKey 3.2. WindowOperations 0. 相关文章链接 Spark文章汇总 1. DStream转换概述 DStream 上的操作与 RDD 的类似&#xff0c;分为 Transf…

测试计划(详细版)

目录 简介 测试计划的目的 测试计划的作用 范围 编写条件 注意事项 评审总结 参考模版 测试策略 简介 数据和数据库完整性测试 接口测试 集成测试 功能测试 用户界面测试 性能评测 负载测试 强度测试 容量测试 安全性和访问控制测试 故障转移和恢复测试 …

【linux】“gdb“调试方法与技巧

"gdb"调试方法与技巧 一、什么是gdb&#xff1f;二、gdb的使用进入gdb调试list/l 查看源码l/list行号list/l函数名 run/r运行break(b)设置断点info break查看断点信息finishn/next单条执行s/step进入函数调用p 变量set var修改变量的值continue/cdisable breakpionts…

基于javaweb旅游景点线路预定系统设计与实现

1.引言 随着我国人们生活水平的不断提高&#xff0c;旅游逐渐成为人们工作之余&#xff0c;进行放松压力&#xff0c;调节情绪的首要选择。近几年&#xff0c;我国旅游游客规模不断扩大&#xff0c;使旅游业得到快速发展&#xff0c;但也带来了更激烈竞争。面对更复杂的旅游业…