本题用到的算法是「前缀和」。中心下标的定义是:该下标左侧所有元素之和等于右侧所有元素之和。如果对每个下标都重新把左右两侧加起来,会做大量重复计算;用前缀和的思路维护「左边已经累加了多少」,一遍扫描就能解决。
给你一个长度为 n 的整数数组 nums,请计算数组的中心下标。
数组中心下标是数组的一个下标 i,其左侧所有元素之和等于右侧所有元素之和。
如果中心下标位于数组最左端,即 i=0,那么左侧元素之和视为 0,因为该下标左侧不存在元素。中心下标位于数组最右端时同理,其右侧元素之和视为 0。
如果数组存在多个中心下标,应输出最靠左的一个。
如果数组不存在中心下标,则输出 −1。
第一行输入一个整数 n,表示数组 nums 的长度。
第二行输入 n 个整数 numsi,表示数组中的各个元素,相邻整数之间用空格分隔。
1≤n≤104
−1000≤numsi≤1000
输出一个整数,表示数组最靠左的中心下标。
如果不存在中心下标,则输出 −1。
输入
6
1 7 3 6 5 6
输出
3
说明
中心下标为 3。
下标 3 左侧元素之和为
1+7+3=11
右侧元素之和为
5+6=11
两侧元素之和相等,因此中心下标为 3。
输入
3
1 2 3
输出
-1
说明
数组中不存在满足条件的中心下标,因此输出 −1。
输入
3
2 1 -1
输出
0
说明
中心下标为 0。
由于下标 0 左侧不存在元素,因此左侧元素之和为 0。
右侧元素之和为
1+(−1)=0
两侧元素之和相等,因此中心下标为 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册