题目描述:
给你一个整数数组nums,请计算数组的中心位置 。数组中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。 数组第一个元素的左侧积为1,最后一个元素的右侧积为1 如果数组有多个中心位置,应该返回最靠近左边的那一个。如果数组不存在中心位置,返回 -1 。
输入描述:
输入只有一行,给出N个正整数用空格分格:nums = 2 5 3 6 5 6
1 <= nums.length <= 1024 1 <= nums[i] <= 10
输出描述:
输出:3
解释: 中心位置是 3 。 左侧数之积 sum = nums[0] * nums[1] * nums[2] = 2 * 5 * 3 = 30 , 右侧数之积 sum = nums[4] * nums[5] = 5 * 6 = 30 ,二者相等。
示例1
输入:
2 5 3 6 5 6
输出:
3
解题思路:
遍历数组中的每一个元素,分别计算左积和右积,如果相等则输出该元素在列表中的下标,否则输出-1
#华为机试,emo了#
#新方法,时间复杂度更低
right_lst=lst[::-1]
for j in range(l):
if j==0:
right_cheng.append(1)
else:
right_cheng.append(right_cheng[j-1]*right_lst[j-1])
right_cheng=right_cheng[::-1]
flag=False
for k in range(l):
if right_cheng[k]==left_cheng[k]:
print(k)
flag=True
break
if not flag:
print(-1)
#旧方法,但更容易理解
#定义一个列表的求积函数
def score(lst:list):
sum=1
#空列表需要进行初始化
if lst==[]:
sum=1
else:
for value in lst:
sum*=value
return sum
st=list(map(int,input().split()))
l=len(st)
count=-1
for i in range(l):
if score(st[:i])==score(st[i+1:]):
count=i
break
print(count)