当前位置: 首页 > 面试经验 >

【华为OD机试2023】数组的中心位置(Python)

优质
小牛编辑
158浏览
2023-03-28

【华为OD机试2023】数组的中心位置(Python)

题目描述:

给你一个整数数组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


#新方法,时间复杂度更低
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)

#华为机试,emo了#
 类似资料: