Go语言题解LeetCode724寻找数组的中心下标
作者:刘09k11 发布时间:2023-07-09 03:26:01
标签:Go,LeetCode,寻找,数组下标
题目描述
724. 寻找数组的中心下标 - 力扣(LeetCode) (leetcode-cn.com)
给你一个整数数组 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 <= 10^4
-1000 <= nums[i] <= 1000
思路分析
暴力 破解思路 遍历数组每一位,计算出每一位左侧所有值和右侧所有值,然后进行比较。复杂度为 O(n²);
优化暴力 破解
其实遍历时,无需每次都计算所有的值,我们可以利用上一次计算好的值,增减一位即可得到本次的目标值。
[1, 2, 3 ,4 ,5, 6]
遍历1:当前位为1,leftSum[0]=0, rightSum[0]=20;
遍历2:当前位为2,leftSum[1]=leftSum[0]+nums[0] = 1, rightSum[1] = rightSum[0] - nums[1] = 18;
遍历3:当前位为3,leftSum[2]=leftSum[1]+nums[1] = 3, rightSum[2] = rightSum[1] - nums[2] = 15;
........
AC 代码
class Solution {
public int pivotIndex(int[] nums) {
int length = nums.length;
if (length == 0) {
return -1;
}
if (length == 1) {
return 0;
}
// 左右侧的累加值,初始化
int leftSum = 0;
int rightSum = 0;
// 右累加值,从第二位开始累加到最后一位
for (int i=1;i<length;i++) {
rightSum += nums[i];
}
for (int i=0;i<length;i++) {
if (i == 0) {
if (leftSum == rightSum) {
return i;
}
} else {
// 不是第一位,左累加值要加上上一位的数字,右累加值要减去本位的数字
leftSum += nums[i-1];
rightSum -= nums[i];
if (leftSum == rightSum) {
return i;
}
}
}
return -1;
}
}
来源:https://juejin.cn/post/7179621615070609466


猜你喜欢
- 问题描述给出一个整数数组 nums,请返回其中位数为偶数的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:
- 支持CSS属性Safari和WebKit实施大子的CSS 2.1规格所界定的万维网联盟( W3C ) ,以及部分的CSS 3规格。 。这个C
- js的setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等。但是很多javascript新手对setTimeout的用法还
- 通过show variables like 'character_set%%';查看编码修改mysql的编码方式可以有以下几
- 如下所示:# coding:utf-8import osfrom PIL import Image# bmp 转换为jpgdef bmpTo
- mybatis plus实体类中字段映射mysql中的json格式1.实体类中有个属性是其他对象或者是List;在数据库中存储时使用的是my
- 本文为大家分享了Windows下mysql5.7.18安装配置教程,供大家参考,具体内容如下准备:操作系统:win7下64位的zip版本的M
- 代码如下: public function fillzero(l1) if len(l1)=1 then fillzero="0&
- 我查了一下解决这个问题的办法,一般是设定全局变量,今天介绍一种新办法上代码difrouters.pyfrom flask import Fl
- 可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/11/03/python-m
- 数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 概述:程序访问优化也可以认为是访问SQL语
- 若你在搜索引擎(如百度)或者各种问答社区(如知乎)搜索 学习Python 最好的 IDE/编辑器是哪个?我想答案肯定是:PyCharm、Ju
- 1. 线性表简介线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列。线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一
- 本文实例为大家分享了vue.js实现简易折叠面板的具体代码,供大家参考,具体内容如下代码如下:主文件:app.vue<template
- Python曾经对我说:"时日不多,赶紧用Python"。于是看到了一个基于python的微信开源库:itchat,玩了
- 例表:假如想要去掉表中的‘#',‘;'而且以‘#'和‘;'为分割线切割数据:#将dfxA_2的每一个分隔符之
- 1. 背景在使用selenium浏览器渲染技术,爬取网站信息时,一般来说,速度是很慢的。而且一般需要用到这种技术爬取的网站,反爬技术都比较厉
- 前面一篇我们已经把unittest的常用用法都已经讲过了,可能很多小伙伴有个疑问,unittest框架怎么做数据驱动呢?这节我们就来学习一下
- 一个小项目自动登录淘宝联盟抓取数据,由于之前在Github上看过类似用Python写的代码因此选择用Python来写,第一次用Python正
- type 所有类是type生成的a = 1b = "abc"print("type a:{}&qu