前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode724:寻找数组的中心索引(java、python3)

Leetcode724:寻找数组的中心索引(java、python3)

原创
作者头像
爱写bug
修改2019-05-29 18:14:36
5960
修改2019-05-29 18:14:36
举报
文章被收录于专栏:爱写Bug爱写Bug

# 寻找数组的中心索引

给定一个整数类型的数组 `nums`,请编写一个能够返回数组**“中心索引”**的方法。

我们是这样定义数组**中心索引**的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

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

**示例 1:**

```

输入:

nums = [1, 7, 3, 6, 5, 6]

输出: 3

解释:

索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。

同时, 3 也是第一个符合要求的中心索引。

```

**示例 2:**

```

输入:

nums = [1, 2, 3]

输出: -1

解释:

数组中不存在满足此条件的中心索引。

```

**说明:**

- `nums` 的长度范围为 `[0, 10000]`。

- 任何一个 `nums[i]` 将会是一个范围在 `[-1000, 1000]`的整数。

起先我的思路是从第一个索引左累加、右累加判断是否想等:

```java

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

List<Integer> nums = new ArrayList<>();

int sumLeft=0,sumRight=0;

Scanner scan =new Scanner(System.in);

while (scan.hasNextInt()){

nums.add(scan.nextInt());

}

int numsSize=nums.size()-1;

for(int i=1;i<numsSize;i++){

for(int j=0;j<i;j++){

sumLeft+=nums.get(j);

}

for(int j=numsSize;j>i;j--){

sumRight+=nums.get(j);

}

if(sumLeft==sumRight){

System.out.println(i);

break;

}else {

sumLeft=sumRight=0;

}

}

if(sumLeft==0){

System.out.println(-1);

}

}

}

```

做完之后搜一下别人的答案。。。果然被吊打。

解题思路:

[参考博客园](https://www.cnblogs.com/pauljoyce/p/9418880.html)

左累加没必要从0号索引开始,之前的累加加上下一号索引即可。右累加完全可以算一次总和减去左累加即可。

参考:[判断中心索引条件](https://blog.csdn.net/weixin_42026630/article/details/81146040)

左侧索引如果和右侧相等,即二倍加左侧累加和+中心索引=总和

### java:

```java

class Solution {

public int pivotIndex(int[] nums) {

int sumLeft=0,sum=0;

for (int n:nums){

sum = sum + n;

}

int numsSize=nums.length-1;

for(int i=0;i<=numsSize;i++){

if(i==0){

sumLeft=0;

}else{

sumLeft+=nums[i-1];

}

//左侧索引如果和右侧相等,即二倍左侧加中心索引=总和

if(sumLeft*2+nums[i]==sum){

return i;

}

}

return -1;

}

}

```

特别说明一下,索引一定要从0开始到最后一个止,因为题目后中心索引右侧相加可以为0。

java默认模板里`int[] nums`指从控制台输入int 数组,不需要Arraylist动态构造数组了。

### python3

​ nums即为list动态数组

```python

class Solution:

def pivotIndex(self, nums: List[int]) -> int:

"""

:type nums: int

"""

sumAll=sum(nums)

leftSum=0

for i in range(len(nums)):

if(i==0):

leftSum=0

else:

leftSum+=nums[i-1]

#左侧索引如果和右侧相等,即二倍加左侧中心索引=总和

if(leftSum*2+nums[i]==sumAll):

return i

return -1

```

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190529170301888.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3prZDc1OA==,size_16,color_FFFFFF,t_70)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档