0%

leetcode-0724-寻找数组的中心下标

0724. 寻找数组的中心下标

  • 标签:数组
  • 难度:简单

题目大意

给定一个数组 nums,找到「左侧元素和」与「右侧元素和相等」的位置(索引),若找不到,则返回 -1。

解体思路1

除去中心索引,左边数和==右边数和

  • 先将数组全部的数和求出,作为右边的数
  • 左边做加法,右边做减法,对比左边和右边的值是否相等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution:

def pivotIndex1(self, nums):
left = 0
right = 0
for index in range(len(nums)):
# 先将数组全部的数和求出,作为右边的数
right += nums[index]
right = sum(nums)
for move in range(len(nums)):
# 右边做减法
right -= nums[move]
print("--right:%s--index-%s-" % (right,move))
# 当左边和右边的值相等,返回当前索引
if left == right:
return move
# 左边做加法
left += nums[move]
print("--left:%s--index-%s-" % (left,move))
return -1


if __name__ == "__main__":

data = [1,3,7,8,6,5]
t = Solution().pivotIndex1(data)
print(t)

解体思路2

两次遍历,第一次遍历先求出数组全部元素和。第二次遍历找到左侧元素和恰好为全部元素和一半的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
def pivotIndex(self, nums):
# 得到数组的总数
sum = 0
for i in range(len(nums)):
sum += nums[i]

# 左侧之和
curr_sum = 0
for i in range(len(nums)):
# 索引值+2*索引左边之和=数组总和
if curr_sum * 2 + nums[i] == sum:
return i
# 累加左侧之和
curr_sum += nums[i]
return -1


if __name__ == "__main__":

data = [1,3,7,8,6,5]
t = Solution().pivotIndex(data)
print(t)