724. 寻找数组的中心下标

代码:

class Solution {
    public int pivotIndex(int[] nums) {
        int last=0;    //放前一个下标的左右差值
        int now=0;     //放当前下标的左右差值

        // 0 位于边界,先算出 0 下标左右的差值
        for(int i=1;i<nums.length;i++){
            last+=nums[i];
        }

        //判断是否 0 下标就已经是中心下标
        if(last==0){
            return 0;
        }

        //获取各个下标左右两边的差值
        for(int i=1;i<nums.length;i++){
            now=last-nums[i]-nums[i-1];
            if(now==0){
                return i;
            }
            last=now;
        }

        return -1;
    }
}

题解:

        本题的意思很简单,我们需要找到一个中心下标,中心下标左边和右边的数据和是相等的,在遇到一个题时,我们先想一下它的暴力解法,因为优化解法通常是由暴力解法演化而来的

        本题的暴力解法也很简单,我们可以去求每个下标左右两边的数据和是否相等,每判断一次下标就需要遍历一次数组,而我们最多要判断 n 次,所以时间复杂度为 O(n),这是一个比较大的复杂度了,我们要想一个优化解法

        要判断左右两边的数据是否相同,我们可以判断左右两边的数据和之差是否为 0 ,如果为 0 ,就说明左右两边的数据和相同,我们可以利用数组 dp 来存储对应下标左右两边的数据和之差,如 dp[ i ] ,就代表 i 下标左右两边的数据和之差,当 dp[ i ] = 0 时就代表  i 下标左右两边的数据和相同,i 下标就为中心下标

        现在我们要探究的就是如何填充 dp 数组,我画了下面的图方便理解

        如上图,我们要获取 dp[ i ] 的值就需要 a - b, a = c - nums[ i ],b = d + nums[ i-1 ],所以 a - b =

c - nums[ i ] - d - nums[ i-1 ] ,而 c - d = dp[ i-1 ],所以 dp[ i ] = dp[ i-1 ] - nums[ i ]  - nums[ i-1 ],

我们通过上面的式子从左到右便可以填充完 dp 数组

        要注意,我们首先要计算 dp[ 0 ] 的值,因为当 i =0 时,在该式子中会出现 -1 下标,这是越界的,所以我们先要计算出 0 下标左右两边数据和的差值,再从左到右填充 dp 数组,当 填充到 dp 数组中的值为 0 时,就找到了中心下标

        实际上,我们在填充 dp 数组时,只需要 dp 前一个下标的值,并且只要 dp 数组中的值出现 0 就不需要遍历了,所以我们直接可以用两个变量,一个记录当前下标的两边数据和的差值,一个记录前一个下标两边数据和的差值,就能代替 dp 数组

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型自定义算子优化方案学习笔记:CUDA算子定义、算子编译、正反向梯度实现

01算子优化的意义 随着大模型应用的普及以及算力紧缺&#xff0c;下一步对于计算性能的追求一定是技术的核心方向。因为目前大模型的计算逻辑是由一个个独立的算子或者说OP正反向求导实现的&#xff0c;底层往往调用的是GPU提供的CUDA的驱动程序。如果不能对于整个计算过程学习…

Ubuntu 常用命令之 cp 命令用法介绍

cp命令在Ubuntu系统中用于复制文件或目录。它的基本格式是cp [选项] 源文件或目录 目标文件或目录。 以下是一些常用的cp命令选项 -i&#xff1a;在覆盖目标文件之前将给出提示。-r或-R&#xff1a;递归复制&#xff0c;用于目录的复制操作。-v&#xff1a;详细模式&#xff…

地平线前端实习一面复盘(加深对var的理解+展开运算符+平拍数组)

目录 前言一&#xff0c;var的作用二&#xff0c;展开运算符三&#xff0c;平拍数组总结 前言 地平线的面试&#xff0c;有提示&#xff0c;很专业&#xff0c;体验很好。 可惜后面未收到消息&#xff0c;但还是要做复盘。收获还是很大的。 一&#xff0c;var的作用 且看下…

MySQL中EXPLAIN执行计划的分析

一. 执行计划能告诉我们什么&#xff1f; SQL如何使用索引联接查询的执行顺序查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行&#xff0c;每一行代表对一个数据库对象的操作 1. ID列 ID列中的如果数据为一组数字&#xff0c;表示执行SELECT语句的顺…

网络基础(十二):ACL与NAT

目录 一、ACL 1、ACL的概述 2、ACL的分类 3、ACL的应用 4、ACL的组成和基本原理 ​编辑 5、ACL的配置 5.1配置基本ACL 5.2配置高级ACL 二、NAT 1、NAT的概述 2、NAT的分类 3、NAT的工作原理 4、静态NAT的配置 5、动态NAT的配置 6、NAPT&#xff08;端口映射&am…

自动驾驶技术:驶向未来的智能之路

导言 自动驾驶技术正引领着汽车产业向着更安全、高效、智能的未来演进。本文将深入研究自动驾驶技术的核心原理、关键技术、应用场景以及对交通、社会的深远影响。 1. 简介 自动驾驶技术是基于先进传感器、计算机视觉、机器学习等技术的创新&#xff0c;旨在实现汽车在不需要人…

论文降重系统同义词替换功能的改进方向 快码论文

大家好&#xff0c;今天来聊聊论文降重系统同义词替换功能的改进方向&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文降重系统同义词替换功能的改进方…

java21特性学习

jdk21下载地址 JDK21文件 JDK21是javaSE平台最新的长期支持版本。 Java SE Java Archive | Oracle JDK21版本说明 JDK 21 Release Notes, Important Changes, and Information JavaSE 版本字符串格式 Version-String Format JavaSE平台采用了基于时间的发布模型,JDK每六个…

虚拟化之安全虚拟化

虚拟化首次引入是在Armv7-A架构中。那时&#xff0c;Hyp模式&#xff08;在AArch32中相当于EL2&#xff09;仅在非安全状态下可用。当Armv8.4-A引入时&#xff0c;添加了对安全状态下EL2的支持作为一个可选特性。 当处理器支持安全EL2时&#xff0c;需要使用SCR_EL3.EEL2位从E…

HarmonyOS:使用MindSpore Lite引擎进行模型推理

场景介绍 MindSpore Lite 是一款 AI 引擎&#xff0c;它提供了面向不同硬件设备 AI 模型推理的功能&#xff0c;目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍使用 MindSpore Lite 推理引擎进行模型推理的通用开发流程。 基本概念 在进行开…

【elementui笔记:el-table表格的输入校验】

之前做得比较多的校验是在el-form表单里做的&#xff0c;但有时也遇到&#xff0c;需要在table内输入数据&#xff0c;然后校验输入的数据是否符合要求的情况。因此记录一下。 思路&#xff1a; 1.需要借助el-form的校验&#xff0c;el-table外层嵌套一层el-form&#xff0c;使…

Java数组(1)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

离线无网络环境下配置Python/Anaconda环境踩过的坑

一、前言 如果你同样需要在无网络环境下安装Python环境&#xff0c;这篇博客是一个很好的参考&#xff0c;由于内网没有网络&#xff0c;因此不能使用conda install/pip install等在线下载安装方式&#xff0c;经过个人尝试&#xff0c;推荐以下两种方法。 二、离线安装python…

2023年陕西省安全员C证证考试题库及陕西省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年陕西省安全员C证证考试题库及陕西省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

MIT6.S081-实验准备

实验全程在Vmware虚拟机 (镜像&#xff1a;Ubuntu-20.04-beta-desktop-amd64) 中进行 一、版本控制 1.1 将mit的实验代码克隆到本地 git clone git://g.csail.mit.edu/xv6-labs-2020 1.2 修改本地git配置文件 创建github仓库&#xff0c;记录仓库地址 我的仓库地址就是htt…

基于AT89C51单片机的LED点阵显示屏设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; [[https://download.csdn.net/download/qq_64505944/88637464?spm1001.2014.3001.5503]] **[源码获取] B 源码仿真图课程设计50 工程实训&#xff08;三&#xff09;课题设计 班级&#xff1a; …

【面试】Java最新面试题资深开发-Java中的垃圾回收机制

问题七&#xff1a;Java中的垃圾回收机制 请简要解释Java中的垃圾回收机制是如何工作的&#xff0c;以及它的优缺点。如果可能&#xff0c;请提供一些垃圾回收器的例子&#xff0c;以及它们在不同场景中的适用性。 Java垃圾回收机制 工作原理&#xff1a; Java垃圾回收机制…

linux(centos7)离线安装mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar

1. 卸载mariadb相关rpm # 查找 rpm -qa|grep mariadb rpm -qa|grep mysql# 卸载 rpm -e --nodeps mariadb... rpm -e --nodeps mysql...2. 删除mysql相关文件 # 查找 find / -name mysql# 删除 rm -rf /var/lib/mysql...3. 查看是否有相关依赖&#xff0c;没有需安装 rpm -q…

考虑用序列化代理代替序列化实例

import java.io.*;// 用户类 class User implements Serializable {private String username;private String password;private String email;public User(String username, String password, String email) {this.username username;this.password password;this.email ema…

CentOS 7 部署 Nacos-2.3.0 (单机版)

CentOS 7 部署 Nacos-2.3.0 &#xff08;单机版&#xff09; 1. 下载 Nacos 安装包 历史版本&#xff1a;https://github.com/alibaba/nacos/releases/ 我选的是 2.3.0 版本&#xff0c;https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.g…