目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
一、题目描述
给你一个整数数组nums,请计算数组的中心位置,数组的中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。数组第一个元素的左侧积为1,最后一个元素的右侧积为1。如果数组有多个中心位置,应该返回最靠近左边的那一个,如果数组不存在中心位置,返回-1。
二、输入描述
输入只有一行,给出N个正整数用空格分隔,nums = 2 5 3 6 5 6
1 <= nums.length <= 1024
1 <= nums[i] <= 10
三、输出描述
3
四、解题思路
- 读取输入的整数数组
nums
。 - 获取数组的长度
n
。 - 初始化中间位置
middle
为n / 2
。 - 初始化左边乘积的标志
leftFlag
为true
,右边乘积的标志rightFlag
为false
。 - 创建一个列表
list
,用于存储中心位置的下标。 - 进入一个无限循环,直到找到中心位置或完成搜索。
- 在循环中,计算左边数的乘积和右边数的乘积,并将它们进行比较。
- 如果左边乘积等于右边乘积,将当前中心位置加入到
list
中。 - 如果左边乘积的标志
leftFlag
为true
,将中心位置向左移动一位,如果已经到达数组的最左边,则将左边乘积的标志设为false
,右边乘积的标志设为true
,并将中心位置重置为n / 2
。 - 如果右边乘积的标志
rightFlag
为true
,将中心位置向右移动一位,如果已经到达数组的最右边,则退出循环。 - 循环结束后,检查列表
list
的大小。 - 如果列表为空,表示数组不存在中心位置,输出-1。
- 否则,将列表
list
排序,并输出最靠近左边的中心位置的下标。
该算法的时间复杂度为O(N)
,其中N是数组的长度。在最坏情况下,需要遍历整个数组来计算左边和右边的乘积。最终的空间复杂度取决于列表list的大小,即O(1)
到O(N)
之间。
五、Python算法源码
a=input().split()
b=[int(i) for i in a]
l=1
r=1
mid=[]
for i in range(0,len(b)):
for j in b[:i]:
l=j*l
for k in b[i+1:]:
r=r*k
if l==r:
mid.append(i)
l=1
r=1
if len(mid)>0:
print(mid[0])
else:
print("-1")
六、效果展示
1、输入
2 5 3 6 5 6
2、输出
3
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。