Skip to content

Commit eb3beec

Browse files
authored
Create (数组操作)724、寻找数组的中心索引
1 parent 9582d08 commit eb3beec

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
3+
4+
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
5+
6+
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
7+
8+
示例 1:
9+
10+
输入:
11+
nums = [1, 7, 3, 6, 5, 6]
12+
输出: 3
13+
解释:
14+
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
15+
同时, 3 也是第一个符合要求的中心索引。
16+
17+
示例 2:
18+
19+
输入:
20+
nums = [1, 2, 3]
21+
输出: -1
22+
解释:
23+
数组中不存在满足此条件的中心索引。
24+
25+
说明:
26+
27+
nums 的长度范围为 [0, 10000]。
28+
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。
29+
*/
30+
31+
int pivotIndex(int* nums, int numsSize)
32+
{
33+
long all_sum = 0;
34+
long left_sum = 0;
35+
long right_sum = 0;
36+
37+
for(int i = 0; i < numsSize; i++)
38+
{
39+
all_sum += nums[i];
40+
}
41+
42+
int index = 0;
43+
while(index != numsSize)
44+
{
45+
right_sum = all_sum - left_sum - nums[index];
46+
if(left_sum == right_sum)
47+
return index;
48+
index++;
49+
left_sum = left_sum + nums[index-1];
50+
}
51+
return -1;
52+
}
53+
54+
/*
55+
由测试集的测试结果可知,这里的中心索引包含第一个元素和最后一个元素。
56+
思路:
57+
1、计算所给数组中的所有元素的总和;
58+
2、从数组左侧开始遍历,以nums[index]作为中心索引元素,计算
59+
其右侧数字的和right_sum = all_sum - left_sum - nums[index];
60+
3、判断左右数字的和是否相等,如果相等,则说明index为中心索引,
61+
否则,继续向右索引,并计算left_sum,开始新一轮的判断;
62+
4、如果索引至最后一个元素仍然没有找到符合题意的index,则返回-1。
63+
*/

0 commit comments

Comments
 (0)